在java中惨寿,一切都是對(duì)象邦泄;要實(shí)例化對(duì)象必須得先聲明,例如:
String s;這是一個(gè)聲明裂垦,但是變量s目前沒有任何意義顺囊,他沒有指向任何對(duì)象,沒有指向任何內(nèi)存段蕉拢;只有當(dāng)給s制定一個(gè)對(duì)象時(shí)s才能被表示為一個(gè)對(duì)象 String s=new String();
Java中有代碼域的概念特碳,一般來說代碼域以{開始,以}結(jié)束晕换,在當(dāng)前代碼域聲明的變量只能在當(dāng)前代碼域中使用午乓;但是當(dāng)代碼運(yùn)行到下一個(gè)代碼域時(shí),當(dāng)前代碼域內(nèi)聲明的變量并不會(huì)立即被銷毀闸准;java有一套垃圾回收(GC)機(jī)制益愈,這個(gè)機(jī)制會(huì)監(jiān)控所有創(chuàng)建的對(duì)象,并在適當(dāng)?shù)臅r(shí)候銷毀他們來回收內(nèi)存夷家;
{
? ??Int x=2;
? ??Public void f(){
? ??Int x=4;
?? ?}
}?? ?
這段代碼在c++中是合法的蒸其,因?yàn)樵贑++中,當(dāng)代碼運(yùn)行到當(dāng)前域之外后瘾英,當(dāng)前域的對(duì)象都會(huì)被銷毀枣接;但是在java中,這段代碼是不合法的缺谴;盡管當(dāng)代碼在其他域中運(yùn)行時(shí)但惶,當(dāng)前域中的對(duì)象還未銷毀(依舊占用內(nèi)存空間)耳鸯,但是依然無法在其他域訪問當(dāng)前域的對(duì)象;
對(duì)于代碼域的概念膀曾,我個(gè)人將它理解為一個(gè)盒子县爬,只有同一個(gè)域下的對(duì)象和操作符被放在一個(gè)盒子里,你無法去觸碰另一個(gè)盒子里的東西添谊;但是當(dāng)流水線走過你這個(gè)盒子的時(shí)候财喳,你還不會(huì)立馬被銷毀,而是過一段時(shí)間等GC機(jī)制認(rèn)為你可以被銷毀了再去銷毀斩狱;
在java中耳高,也有些變量不受代碼域的控制,這些變量或者成員方法必須加以static修飾所踊;
關(guān)鍵字static表示這個(gè)變量或者成員方法占有一段的單獨(dú)的內(nèi)存泌枪,這段內(nèi)存與任何對(duì)象沒有關(guān)聯(lián),甚至哪怕你不創(chuàng)建這個(gè)類的對(duì)象秕岛,這個(gè)類中被標(biāo)記為static的屬性或者成員方法都可以被訪問碌燕;
新建一個(gè)對(duì)象其本質(zhì)就是去申請(qǐng)一段內(nèi)存,并且將這段內(nèi)存按類的屬性和成員方法分成若個(gè)部分继薛,再將這幾個(gè)部分賦值修壕;
當(dāng)類內(nèi)有static修飾的屬性或者成員方法時(shí),在new這個(gè)類的對(duì)象的時(shí)候并不會(huì)再去申請(qǐng)這部分的內(nèi)存遏考;
也就是說慈鸠,無論如何這個(gè)類被實(shí)例化了幾個(gè)對(duì)象,這些對(duì)象都共享同一段內(nèi)存來表示其static的屬性或者成員變量诈皿;
static關(guān)鍵字是的被其標(biāo)記的變量不會(huì)被重復(fù)生成林束,所以放在工具類中很方便;
?Class StaticTest{
? ??Public static int c=4;
}
Void f(){
? ? StaticTest t1=new StaticTest();
? ? StaticTest t2=new StaticTest();
? ? StaticTest.c++;
}
最后一行代碼之后稽亏,t1和t1中的變量c都變成了5壶冒;
this關(guān)鍵字:
? ? this關(guān)鍵字表示當(dāng)前代碼域下的當(dāng)前對(duì)象;
final關(guān)鍵字:
? ? final關(guān)鍵字可以修飾很多事物:
? ? 當(dāng)final關(guān)鍵字修飾類時(shí)截歉,這個(gè)類無法被繼承胖腾,同時(shí)類內(nèi)所有方法被隱性的標(biāo)記為final;
? ? 通常將工具類聲明在final瘪松;
? ? 當(dāng)final關(guān)鍵字修飾變量時(shí)咸作,代表這個(gè)變量不可被改變并且必須初始化;
? ? 變量的初始化有兩種方法宵睦,直接在定義類的時(shí)候給上初始值或者在構(gòu)造函數(shù)中寫死初始值记罚;
? ? 如果這個(gè)變量只是一個(gè)引用,則表示該引用的地址不能被改變壳嚎,但是值可以有變動(dòng)桐智;
? ? 當(dāng)final關(guān)鍵字修飾方法時(shí)末早,代表這個(gè)方法無法被重寫,類內(nèi)的private方法被隱性的標(biāo)記為final说庭;
super關(guān)鍵字:
super關(guān)鍵字表示當(dāng)前類的父類然磷;
super(Object);表示調(diào)用當(dāng)前類的父類的構(gòu)造函數(shù)刊驴,這個(gè)構(gòu)造函數(shù)可以帶參數(shù)姿搜,也可以調(diào)用不帶參數(shù)的系統(tǒng)默認(rèn)的構(gòu)造函數(shù);
super.i;表示調(diào)用當(dāng)前類的父類的一個(gè)屬性捆憎;
super的出現(xiàn)時(shí)為了避免當(dāng)當(dāng)前類和父類中某些方法或者屬性名稱相同時(shí)引起的混亂舅柜;
基本類型:
java中共有8種基本類型和一種特殊類型void;
基本類型 ? ? ? ? ? ? ?大小 ? ? ? ? ? ? 默認(rèn)值
?boolean ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? false
?char. ? ? ? ? ? ? ? ? ? 16 ? ? ? ? ? ? ? ? ? null
short ? ? ? ? ? ? ? ? ? ? ?16 ? ? ? ? ? ? ? ?0
byte ? ? ? ? ? ? ? ? ? ? 8 ? ? ? ? ? ? ? ? ? ?0
int ? ? ? ? ? ? ? ? ? ? ?32 ? ? ? ? ? ? ? ? ? 0
long ? ? ? ? ? ? ? ? ? ?64 ? ? ? ? ? ? ? ? ? ?oL
float ? ? ? ? ? ? ? ? ? ?32 ? ? ? ? ? ? ? ? ? ? 0.0f
double ? ? ? ? ? ? ? ?64 ? ? ? ? ? ? ? ? ? ?0.0d
Void
基本每一個(gè)基本類都有一個(gè)裝箱類攻礼,java通過自動(dòng)拆裝想來使基本類型有較高的可用性业踢;
對(duì)象的生命周期由域內(nèi)聲明至被GC銷毀,只有在域內(nèi)聲明至當(dāng)前域結(jié)束之前才可被調(diào)用礁扮;