1. 建構函式
建構函式的作用:可以用於給物件乙個初始化。
當乙個類中沒有定義建構函式時,那麼系統會預設給該類加乙個空引數的建構函式。當自己定義了乙個建構函式時,預設的建構函式就沒有了。
2. 構造**塊
作用:給物件進行初始化
物件一建立就執行,而且優先順序大於建構函式
的執行。
構造**塊和建構函式的區別:
構造**塊是給所有的物件進行統一初始化的。而建構函式是給對應的物件初始化的。
構造**塊中定義的是不同物件共性的初始化內容。
3. static的特點
1.隨著類的載入而載入。也就是說:靜態會隨著類的消失而消失,說明它的生命週期最長
2.優先於物件存在:明確一點:靜態先存在,物件是後存在的。
3.被所有物件所共享
4.可以直接被類名所呼叫。
例項變數和類變數的區別:
1.存放位置。
類變數隨著類的載入而存在於方法區中。
例項變數隨著物件的建立而存在於堆記憶體中。
2.生命週期
類變數生命週期長,隨著類的消失而消失。
例項變數生命週期隨著物件的消失而消失。
靜態使用注意事項:
1.靜態方法只能直接訪問靜態成員。不能直接訪問非靜態成員,如果希望在靜態方法中訪問非靜態變數,可以通過建立類的物件,然後通過物件間接的訪問非靜態變數.
非靜態方法即可以訪問靜態也可以訪問非靜態。
2.靜態方法中不可以定義this,super關鍵字。
因為靜態優先於物件存在。所以靜態方法中不可以出現this。
3.主函式是靜態的。
靜態的利和弊:
利處:對物件的共享資料進行單獨空間的儲存,節省空間,可以直接被類名呼叫。
弊端:生命週期過長。訪問出現侷限性。(靜態雖好,只能訪問靜態)
4. 靜態**塊
格式:static
特點:靜態初始化塊只在類載入時執行,且只會執行一次,同時靜態初始化塊只能給靜態變數賦值,不能初始化普通的成員變數。而構造**塊隨著物件的建立而執行,每建立一次物件就執行一次構造**塊。優先順序:靜態**塊》構造**塊(普通初始化塊)>構造方法。
(靜態**塊、構造**塊和構造方法的區別 參考:
person p=new person();這句話都做了什麼事情?
1.因為new用到了person.class。所以會找到person.class檔案並載入到記憶體中。
2.執行該類中的static**塊、如果有的話,給person.class類進行初始化。
3.在堆記憶體中開闢空間、分配記憶體空間。
4.在堆記憶體中建立物件的特有屬性。並進行預設初始化。
5.對屬性進行顯示初始化。
6.對物件進行構造**塊初始化。
7.將記憶體進行對應建構函式初始化
8.將記憶體位址賦值給棧記憶體中的p
5. 設計模式 (參考:
)設計模式:解決某一類問題最行之有效的方法。
單例設計模式:解決乙個類在記憶體只存在乙個物件。
想要保證物件的唯一:
1.為了避免其他程式過多建立該類對類物件。先禁止其他程式建立該類物件。
2.還為了讓其他程式可以訪問到該類物件,只好在本類中,自定義乙個物件。
3.為了方便其他程式對自定義物件的訪問,可以對外提供一些訪問方式。
這三部怎**中體現?
1.將建構函式私有化。
2.在類中建立乙個本類物件。
3.提供乙個方法可以獲取到該物件。
對於事物該怎麼描述還怎麼描述。
當需要將該事物的物件保證在記憶體中唯一時,就將以上的三步加上即可。
/* * 這個是先初始化物件
* 稱為:餓漢式
* single類一進記憶體,就已經建立好了物件。由於private static single s=new single(); */
class single
private static single s=new single();
public static single getinstance() }
/* * 物件是方法被呼叫時,才初始化,也叫做物件的延時載入。稱為:懶漢式
* single類進記憶體,物件還沒有存在,只有呼叫getinstance方法,才建立物件。 */
class single1
private static single1 s=null; /*
*此處可以加乙個synchronized(同步),使只有乙個執行緒可以進入該方法,避免錯亂。
* 但是每次只有乙個執行緒可以進入導致該方法效率低。
public static synchronized single1 getinstance() */
/*以下方法更為高效*/
public static single1 getinstance()
}
return s; }
}
java基礎部分總結(一)
收穫 1points i new point 解決 在這裡對類陣列中的元素申請分配空間。2除錯debug,在console裡面看問題,在variables看id傳送有什麼問題 參考這篇 新增絕對路徑 比如 d helloworld.txt 要麼寫成 要麼寫成 length 陣列的屬性 length ...
java基礎總結
float 賦值時後邊加f 如 float ff 1.2f 靜態變數 宣告時前邊 static 如static int x 0 資料型別轉換 低精度可以直接轉換成高精度,高精度轉換成低精度 需要顯示型別轉換 int x 50 float y x 顯示轉換 int a int 45.23 foreac...
Java基礎總結
1.string的理解 string s hello world 宣告的內容 乙個指向物件的引用,名為 s 可以指向型別為string的任何物件,目前指向 hello world 這個string型別的物件 string string s 明了另外乙個只能指向string物件的引用,名為string...