Java學習一些有意思的東西(1)
構造方法注意事項
- 如果我們沒有給出構造方法,系統將自動提供一個無參構造方法。
- 如果我們給出了構造方法,系統將不再提供預設的無參構造方法。
- 注意:這個時候,如果我們還想使用無參構造方法,就必須自己給出。建議永遠自己給出無參構造方法!
class Demo_2 { public static void main(String[] args) { /* ………………………… ………………………… */ } } class Test_1 { Public Test_1() { System.out.println("無參的方法被呼叫"); } public Test_1(int num, String str) { System.out.println("有參的方法被呼叫"); } }
static關鍵字的特點
- 隨著類的載入而載入
- 優先於物件存在
- 被類的所有物件共享
* 舉例:咱們班級的學生應該共用同一個班級編號。
* 其實這個特點也是在告訴我們什麼時候使用靜態?
* 如果某個成員變數是被所有物件共享的,那麼它就應該定義為靜態的。
* 舉例:
- 飲水機(用靜態修飾)
- 水杯(不能用靜態修飾)
- 共性用靜態,特性用非靜態
4 可以通過類名呼叫
* 其實它本身也可以通過物件名呼叫。
* 推薦使用類名呼叫。
ps:如果一個類中所有的方法都是靜態的,那麼最好把這個類的構造方法private化,這樣使得該類方法只能通過類名呼叫而不能建立該類物件!!!!!
class Demo_3 {
private Demo_3() { //將構造方法私有,使得該類無法被new
}
public static void method_1() {
/* ... */
}
public static void method_2() {
/* ... */
}
/*
.
.
.
*/
}
* 靜態修飾的內容一般我們稱其為:與類相關的,類成員
class Demo_1 { public static void main(String[] args) { Static.print(); // 類名呼叫 } } class Static { public static void print() { System.out.println("Hello World"); } }
static的注意事項
在靜態方法中是沒有this關鍵字的
* 如何理解呢?
* 靜態是隨著類的載入而載入,this是隨著物件的建立而存在。
* 靜態比物件先存在。
靜態方法只能訪問靜態的成員變數和靜態的成員方法
* 靜態方法:
* 成員變數:只能訪問靜態變數
* 成員方法:只能訪問靜態成員方法
* 非靜態方法:
* 成員變數:可以是靜態的,也可以是非靜態的
* 成員方法:可是是靜態的成員方法,也可以是非靜態的成員方法。
* 簡單記:
* 靜態只能訪問靜態
Static 總結
* A:所屬不同
* 靜態變數屬於類,所以也稱為為類變數
* 成員變數屬於物件,所以也稱為例項變數(物件變數)
* B:記憶體中位置不同
* 靜態變數儲存於方法區的靜態區
* 成員變數儲存於堆記憶體
* C:記憶體出現時間不同
* 靜態變數隨著類的載入而載入,隨著類的消失而消失
* 成員變數隨著物件的建立而存在,隨著物件的消失而消失
* D:呼叫不同
* 靜態變數可以通過類名呼叫,也可以通過物件呼叫
* 成員變數只能通過對 象名呼叫