1.構(gòu)造器
構(gòu)造器就是類(lèi)創(chuàng)建對(duì)象的初始化方法哪雕。它的名字與類(lèi)名相同鲫趁。 假設(shè)沒(méi)有寫(xiě)有構(gòu)造器的情況下,虛擬機(jī)會(huì)自動(dòng)加上一個(gè)沒(méi)有參數(shù)的構(gòu)造器挨厚,如果【學(xué)Java,到凱哥學(xué)堂kaige123.com】寫(xiě)有構(gòu)造器疫剃,那么虛擬機(jī)就不會(huì)在加上構(gòu)造器了。
publicclassTest1{publicTest1(){System.out.println("我是構(gòu)造器巢价!");}}
構(gòu)造器就是一個(gè)方法,所以它和普通的方法一樣也可以做方法重載壤躲,換句話說(shuō)就是構(gòu)造器的重載。 和方法重載一樣構(gòu)造器重載就是多個(gè)一樣名字參數(shù)類(lèi)型和參數(shù)的個(gè)數(shù)不同的多個(gè)構(gòu)造器碉克。
publicclassTest1{publicTest1(){System.out.println("先脫去衣服");}publicTest1(String name){}publicTest1(intname){}}
2.實(shí)例塊 實(shí)例塊就是一個(gè)劃分的代碼區(qū)域。{ 代碼 } 1.它是在構(gòu)造器之前執(zhí)行棉胀。 2.它和屬性初始化一同執(zhí)行冀膝。 3.一個(gè)類(lèi)中可以有很多個(gè)實(shí)例塊。
執(zhí)行過(guò)程是按照順序從上到下執(zhí)行窝剖。
publicclassTest3{{System.out.println("我是實(shí)例塊!");}}
3.this this用3種用法: 1.表示當(dāng)前的對(duì)象赐纱。 假設(shè)在一個(gè)方法中傳入的參數(shù)名為a1,在實(shí)例中也有一個(gè)變量叫做a1.如果方法中的參數(shù)a1想賦值給類(lèi)中的a1疙描。則就需要到this關(guān)鍵字。因?yàn)閖ava如果遇到同名的變量就會(huì)默認(rèn)用和你最近的參數(shù)起胰。
publicclassTest4 {String name;// 重名了 使用的規(guī)則是 就近原則publicTest4(String name){this.name = name;}}2.當(dāng)前對(duì)象返回publicTest4getTest4(){returnthis;}
3.構(gòu)造器轉(zhuǎn)發(fā)
注意:靜態(tài)屬性和靜態(tài)方法參數(shù)重名怎么辦巫延? 這時(shí)就不能用this了。因?yàn)閠his是當(dāng)前對(duì)象炉峰。 既然是靜態(tài)成員那就直接類(lèi)名點(diǎn)屬性名就可以了畏妖。 例如:
staticStringaddress;staticvoidmethod(Stringaddress) {Test4.address = address;}
4.靜態(tài)塊 static{} 是類(lèi)加載的時(shí)候和靜態(tài)屬性一起執(zhí)行的疼阔。也是按順序從上往下執(zhí)行。
5.類(lèi)的加載 1.在聲明靜態(tài)屬性但并沒(méi)有使用屬性時(shí)婆廊,不會(huì)對(duì)類(lèi)進(jìn)行加載。 使用靜態(tài)屬性時(shí)才會(huì)對(duì)類(lèi)進(jìn)行加載否彩。 2.聲明或使用常量時(shí)都不會(huì)對(duì)類(lèi)進(jìn)行加載嗦随。 因?yàn)槌A康膬?nèi)存【學(xué)Java,到凱哥學(xué)堂kaige123.com】和類(lèi)成員的內(nèi)存不在同一內(nèi)存內(nèi)枚尼。 3.使用靜態(tài)方法或new肯定會(huì)加載類(lèi)。 4.//加載類(lèi) class.forName( 包名.類(lèi)名 )
怪題:
main方法中,new Test1();崎溃,然而Test1類(lèi)中又new Test1,因?yàn)閚ew對(duì)象的時(shí)候肯定會(huì)加載類(lèi),然而加載類(lèi)其實(shí)就是加載靜態(tài)屬性袁串,所以這就成了死循環(huán)概而。報(bào)出方法嵌套調(diào)用溢出的錯(cuò)誤赎瑰。 java.lang.StackOverflowError