用構(gòu)造器確保初始化
類里的數(shù)據(jù)成員荠割,有三個途徑初始化:
- 默認(rèn)初始化玷或,一般都為0。即使沒有默認(rèn)構(gòu)造器毕莱,也會初始化
- 直接初始化器贩,就是直接賦值
- 構(gòu)造器(構(gòu)造函數(shù))初始化
重載
涉及基本類型的重載需要注意一下
- 常數(shù)被當(dāng)做int
- 如果傳入的數(shù)據(jù)類型小于方法中聲明的形式參數(shù),自動提升
- char略有不同朋截,如果無法找到恰好接受char參數(shù)的方法蛹稍,就會把char提升為int
注意不要通過返回值區(qū)分重載方法
默認(rèn)構(gòu)造器
默認(rèn)構(gòu)造器就是無參數(shù)構(gòu)造函數(shù),可以更改默認(rèn)構(gòu)造器部服。
如果定義了構(gòu)造器唆姐,編譯器就不會自動創(chuàng)建默認(rèn)構(gòu)造器
class Bird{
Bird(int i){}
Bird(double i) {}
}
new Bird();//這樣就會找不到構(gòu)造器
this關(guān)鍵字
- this關(guān)鍵字只能在方法內(nèi)部使用,表示對“調(diào)用方法的那個對象”的引用廓八。但要注意在方法內(nèi)部調(diào)用同一個類的另一個方法奉芦,就不比使用this赵抢,直接調(diào)用即可。
當(dāng)需要返回對當(dāng)前對象的引用時声功,常常用return this
public class leaf{
int i=0;
leaf incres(){
i++;
return this;
}}
leaf x=new leaf();
x.incres().incres().i;//i=2
- 將自身傳遞給外部方法時烦却,必須使用this關(guān)鍵字。
- 在構(gòu)造器中調(diào)用構(gòu)造器可以用this先巴,必須放在構(gòu)造器的開頭其爵,一個構(gòu)造器內(nèi)只能有一個this。除了構(gòu)造器可以調(diào)用構(gòu)造器伸蚯,其他任何地方都不可以調(diào)用
static的含義
- static是沒有this的方法摩渺。(還不理解)
- static方法不能調(diào)用非靜態(tài)方法〖劣剩可以直接通過類調(diào)用(主要用途)
- 在類中置入static方法就可以訪問其他static方法和static域
清理:終結(jié)處理和垃圾回收
finalize()函數(shù)后面再深入學(xué)習(xí)
成員初始化
默認(rèn)初始化是類的數(shù)據(jù)成員摇幻。而方法的數(shù)據(jù)成員需要手動。
自動初始化在構(gòu)造器被調(diào)用前執(zhí)行挥萌。
初始化順序
變量定義的先后順序決定了初始化的順序囚企。即使變量定義散布于方法定義之間,他們?nèi)耘f會在任何地方(包括構(gòu)造器)被調(diào)用之前得到初始化瑞眼。
靜態(tài)數(shù)據(jù)的初始化
靜態(tài)初始化只有在必要時刻才會進(jìn)行龙宏。只有第一次訪問靜態(tài)數(shù)據(jù)是被初始化,此后伤疙,靜態(tài)對象不會再次被出書畫银酗。
總結(jié)對象的創(chuàng)建過程:
- 即使沒有顯示使用static關(guān)鍵字,構(gòu)造器實(shí)際上也是靜態(tài)方法徒像。當(dāng)首次創(chuàng)建類型為Dog的對象時黍特,或者Dog類的靜態(tài)方法/靜態(tài)域首次被訪問時,Java解釋器必須查找類途徑锯蛀,以定位Dog.class.
- 然后載入Dog.class, 有關(guān)所有靜態(tài)初始化的動作都會執(zhí)行灭衷。因此,靜態(tài)初始化只在class對象首次加載的時候進(jìn)行一次
- 當(dāng)用new Dog()創(chuàng)建對象的時候旁涤, 首先將在堆上為Dog對象分配足夠的存儲空間翔曲、
- 這塊存儲空間被清零。設(shè)置為默認(rèn)值0 or null
- 執(zhí)行所有出現(xiàn)于字段定義處的初始化動作
- 執(zhí)行構(gòu)造器
數(shù)組的初始化
- 數(shù)組特殊的初始化是由一對花括號完成的劈愚,等價于new
int[] a1={1,2,3,4,5};
int[] a2=a1;//兩者指向同一片內(nèi)存空間
a1.length;//length是數(shù)組的固有成員
- 直接用new在數(shù)組里創(chuàng)建元素
int[] a=new int[num];
int[] b;
b=new int[num];
- 可以用花括號括起來的列表初始化對象數(shù)組
Integer[] a= {new Integer(1), new Integer(2), 3,};
Integer[] b=new Integer[]{new Integer(1), new Integer(2), 3,};
System.out.println(Arrays.toString(a));