內(nèi)存分配
靜態(tài)存儲區(qū)(方法區(qū)):主要存放靜態(tài)數(shù)據(jù)条霜、全局 static 數(shù)據(jù)和常量蛾绎。這塊內(nèi)存在程序編譯時(shí)就已經(jīng)分配好薄啥,并且在程序整個(gè)運(yùn)行期間都存在。
棧區(qū) :當(dāng)方法被執(zhí)行時(shí)似扔,方法體內(nèi)的局部變量都在棧上創(chuàng)建吨些,并在方法執(zhí)行結(jié)束時(shí)這些局部變量所持有的內(nèi)存將會自動被釋放。因?yàn)闂?nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中虫几,效率很高锤灿,但是分配的內(nèi)存容量有限。
堆區(qū) : 又稱動態(tài)內(nèi)存分配辆脸,通常就是指在程序運(yùn)行時(shí)直接 new 出來的內(nèi)存但校。這部分內(nèi)存在不使用時(shí)將會由 Java 垃圾回收器來負(fù)責(zé)回收。
注意,如果在一個(gè)方法中定義了一個(gè)引用型變量啡氢,例如String s=new String();引用s被存放在棧中状囱,而s指向的是new String()在堆中的地址。
對象的引用倘是。
引用指的是對象的代表亭枷,例如String s,這里的s就是引用搀崭,將它和String對象關(guān)聯(lián)起來叨粘,String s=new String();
別名現(xiàn)象(將一個(gè)引用賦值給另一個(gè)引用)
Tank t1=new Tank()瘤睹;
t1.a=6;
Tank t2=new Tank()升敲;
t2.a=12
t1=t2;
t1.a=27;
這時(shí) t2.a也會變成27轰传,因?yàn)閷1被賦予了t2的引用驴党,他們兩個(gè)指向相同的tank對象.
別名現(xiàn)象只有在對象和對象之間“相等”時(shí),才會出現(xiàn)获茬。
equals和==
在很多面試情況下都會被問到
1.其實(shí)在java的基類Object類中的equals方法就是用 ==做判斷來比較兩個(gè)值是否相等港庄,基本類型同樣也是用 ==來進(jìn)行判斷的。
2.而在引用類型中恕曲,大多都重寫了equals方法鹏氧,所以
equals比較的是對象的內(nèi)容是否相同,而==比較的是對象的內(nèi)存地址是否相等
短路現(xiàn)象佩谣。
(1<2)&&(3>2)當(dāng)編譯器發(fā)現(xiàn)整個(gè)表達(dá)試有一部分已經(jīng)為false時(shí)度帮,不會執(zhí)行后面多余的表達(dá)式。
return
一方面指定方法返回一個(gè)什么值,另一方面會讓當(dāng)前方法執(zhí)行到return時(shí)退出方法笨篷。
重載
方法的返回值相同,方法名相同瓣履,參數(shù)不同的方法率翅,相互為重載方法。
this關(guān)鍵字袖迎。
this只能在方法內(nèi)部使用冕臭,表示調(diào)用方法的那個(gè)對象的引用。
static
聲明常亮和靜態(tài)方法燕锥,靜態(tài)方法內(nèi)部不能調(diào)用非靜態(tài)的方法辜贵,
初始化的順序
1.變量的初始化優(yōu)先于方法,包括構(gòu)造器
2.先靜態(tài)對象后非靜態(tài)對象归形。
3.靜態(tài)語句塊在類加載時(shí)已經(jīng)執(zhí)行了托慨,靜態(tài)量在被賦值時(shí)已經(jīng)就初始化了,并存儲在靜態(tài)內(nèi)存塊中暇榴。
可變參數(shù) int...f
一個(gè)方法的參數(shù)是可變參數(shù)可以不傳值厚棵。