Java 學習(09)--方法過載/建構函式/static 變數

weixin_33766168發表於2018-06-08

Java 學習(09)--方法過載/建構函式

1 、方法

方法是一組為了實現特定功能的程式碼塊的集合。方法在語法上的功能主要有以下兩個:

①:結構化程式碼

將程式碼按照功能進行組織, 使程式碼的結構比較清晰, 容易閱讀和修改, 也就是程式的可維護性強。

②:減少程式碼重複

一個固定的功能, 可能會在程式中多次使用, 在使用時只需要呼叫寫好的方法, 而不用重複書寫對應的功能程式碼。

方法在書寫時需要注意以下兩點:

①:邏輯嚴謹

方法實現的一個完整的功能, 所以在書寫時要考慮到各種可能的情況, 並對每種情況做出恰當的處理。

②:通用性強(可重複利用)

方法實現的是一種功能, 在實際實現時, 可以根據需要, 使方法具備一定的通用性,除非必要,否則不要寫專用的方法。在 Java 語言中,恰當的使用方法,將使程式更加優雅,便於閱讀和使用。

我的總結:

方法:一段可重複使用的程式碼段;

程式中完成獨立功能的一段程式碼的集合

格式: 

修飾符返回值型別方法名 (引數型別引數名 1,引數型別引數名 2...) { 方 法 體 語 句                                        ; return 返回值 ;

修飾符:目前就用 public static 。後面再詳細講解其他修飾符返回值型別:就是功能結果的資料型別

方法名:就是起了一個名字,方便我們呼叫該方法。引數型別:就是引數的資料型別

引數名:就是變數引數分類:

實參:實際參與運算的資料

形參:方法上定義的,用於接收實際引數的變數方法體語句:就是完成功能的程式碼塊

return :結束方法

返回值:就是功能的結果,由 return 帶給呼叫者。

兩個明確:

返回值型別:結果的資料型別

引數列表:引數的個數及對應的資料型別 

方法的注意事項 

A:方法不呼叫不執行    B:方法之間是平級關係,不能巢狀定義          C:方法定義的時候,引數是用,隔開的                      

  D:方法在呼叫的時候,不用在傳遞資料型別           E:如果方法有明確的返回值型別,就必須有 return 語句返回。

示例:

輸出:11  (將a,b寫固定了,不推薦)

輸出:30

方法過載 overload:在一個類中方法同名不同參----1.方法名相同 2.引數列表不同:數量、型別、順序不同)

不能根據返回值型別判斷方法過載

2.private 關鍵字 

(1)私有的意義,可以修飾成員變數和成員方法 

(2)特點: 被 private修飾的後的成員只能在本類中被訪問

(3)private 的應用: 以後再寫一個類的時候:把所有的成員變數給 private 了 提供對應的 getXxx()/setXxx() 方法

輸出:null

輸出:林青霞

3.this關鍵字 

 (1)代表當前類的引用物件 (哪個物件呼叫方法,該方法內部的 this 就代表那個物件)

 (2)this 的應用場景: A:解決了區域性變數隱藏成員變數的問題 

當變數一個是成員變數,一個是區域性變數時,變數可以重名,就近原則

this 表示該類的一個物件的引用(那個物件呼叫這個方法,this 就表示那個方法)

this 作用:1.當區域性變數和成員變數同名時,通過 this 關鍵字 呼叫成員變數

this 作用2:通過 this(),用於構造方法的第一行,用來呼叫其他構造方法

示例:

輸出:null 0

輸出:zs 18

4.構造方法 

(1)作用:1.用來建立物件 2.用於對物件的成員變數進行資料的初始化 

(2)格式: A:方法名和類名相同(包括大小寫) B:沒有返回值型別,連 void 都不能有,也沒有返回值

C:不能通過物件 . 方法名的方式進行呼叫,而是通過 new 關鍵字進行呼叫 new 物件()

思考題:構造方法中可不可以有 return語句呢 ? 

可以。而是我們寫成這個樣子就 OK 了:return; 其實,在任何的 void 型別的方法的最後你都可以寫上: return; 

(3)構造方法的注意事項 

A:如果我們沒寫構造方法,系統將提供一個預設的無參構造方法 

B:如果我們給出了構造方法,系統將不再提供預設構造方法 如果這個時候,我們要使用無參構造方法,就必須自己給出。

C:建構函式也可以過載

 推薦:永遠手動提供一個無引數的構造方法。

 (4)給成員變數賦值的方式(3個) A:定義成員變數時賦值(不常用) B:通過set方法賦值  C:帶參構造方法

示例:

輸出:林青霞 40

建立一個物件時 (Student s = new Student()),都做了那些事

1.將 Student.class 載入到記憶體(只有第一次建立時才載入)

2.在棧記憶體中為變數 s 開闢空間

3.在棧記憶體中為學生變數開闢空間

4.給學生的成員變數進行預設初始化 null 0

5.給學生類的成員變數進行顯示的初始化

6.通過構造方法給成員變數進行初始化

7.物件構造完畢,將物件地址(引用)賦值給 s 變數

(5)標準案例 

class Student { 
	private String name; 
	private int age; 
	public Student(){} 
	public Student(String name,int age) { 
		this.name = name; this.age = age; 
	} 
	public String getName() { 
		return name; 
	} 
	public void setName(String name) { 
		this.name = name; 
	} 
	public int getAge() { 
		return age; 
	} 
	public void setAge(int age) { 
		this.age = age; 
	} 
} 

成員變數賦值的方式:

class StudentDemo { 
	public static void main(String[] args) { 
	//方式 1 
	Student s1 = new Student(); 
	s1.setName("小明"); 
	s1.setAge(18); 
	System.out.println(s1.getName()+"---"+s1.getAge()); 
   //方式 2 
   Student s2 = new Student("小剛",19); 
   System.out.println(s2.getName()+"---"+s2.getAge());
   } 
} 

執行:

4.程式碼塊 

(1)用{} 括起來的程式碼。

(2)分類: A:區域性程式碼塊 用於限定變數的生命週期,及早釋放,提高記憶體利用率。 B:構造程式碼塊 把多個構造方法中相同的程式碼可以放到這裡, 每個構造方法執行前, 首先執行構造程式碼塊。 C:靜態程式碼塊 對類的資料進行初始化,僅僅只執行一次。 

(3)靜態程式碼塊 ,構造程式碼塊 ,構造方法的順序問題 ? 靜態程式碼塊 > 構造程式碼塊 > 構造方法

static : 靜態的意思,可以修飾成員變數和成員方法

特點:1.談過static 變數修飾的變數是靜態變數,所有的該類的物件共享靜態變數

          2.靜態變數隨著類的載入而載入(.class)優先於物件而存在的

          3.靜態的變數和靜態的方法可以不用建立該類的物件,直接通過類名通過類名 . 變數名或 類名 . 方法名(實參列表)

          4.不能在靜態的方法中訪問非靜態的變數,在非靜態的方法中可以訪問靜態的變數

    

特點2.靜態變數隨著類的載入而載入(.class)優先於物件而存在的

        static 變數修飾的變數不放在棧中,放在靜態編碼區 

特點3:靜態的變數和靜態的方法可以不用建立該類的物件,直接通過類名通過類名 . 變數名或 類名 . 方法名(實參列表)

報錯(age)

特點 4.不能在靜態的方法中訪問非靜態的變數,在非靜態的方法中可以訪問靜態的變數

報錯(age)

輸出:50  (需要定義變數)

輸出:楊過

相關文章