內存分配
靜態存儲區(方法區):主要存放靜態數據、全局 static 數據和常量。這塊內存在程序編譯時就已經分配好,并且在程序整個運行期間都存在。
棧區 :當方法被執行時,方法體內的局部變量都在棧上創建,并在方法執行結束時這些局部變量所持有的內存將會自動被釋放。因為棧內存分配運算內置于處理器的指令集中,效率很高,但是分配的內存容量有限。
堆區 : 又稱動態內存分配,通常就是指在程序運行時直接 new 出來的內存。這部分內存在不使用時將會由 Java 垃圾回收器來負責回收。
注意,如果在一個方法中定義了一個引用型變量,例如String s=new String();引用s被存放在棧中,而s指向的是new String()在堆中的地址。
對象的引用。
引用指的是對象的代表,例如String s,這里的s就是引用,將它和String對象關聯起來,String s=new String();
別名現象(將一個引用賦值給另一個引用)
Tank t1=new Tank();
t1.a=6;
Tank t2=new Tank();
t2.a=12
t1=t2;
t1.a=27;
這時 t2.a也會變成27,因為將t1被賦予了t2的引用,他們兩個指向相同的tank對象.
別名現象只有在對象和對象之間“相等”時,才會出現。
equals和==
在很多面試情況下都會被問到
1.其實在java的基類Object類中的equals方法就是用 ==做判斷來比較兩個值是否相等,基本類型同樣也是用 ==來進行判斷的。
2.而在引用類型中,大多都重寫了equals方法,所以
equals比較的是對象的內容是否相同,而==比較的是對象的內存地址是否相等
短路現象。
(1<2)&&(3>2)當編譯器發現整個表達試有一部分已經為false時,不會執行后面多余的表達式。
return
一方面指定方法返回一個什么值,另一方面會讓當前方法執行到return時退出方法。
重載
方法的返回值相同,方法名相同,參數不同的方法,相互為重載方法。
this關鍵字。
this只能在方法內部使用,表示調用方法的那個對象的引用。
static
聲明常亮和靜態方法,靜態方法內部不能調用非靜態的方法,
初始化的順序
1.變量的初始化優先于方法,包括構造器
2.先靜態對象后非靜態對象。
3.靜態語句塊在類加載時已經執行了,靜態量在被賦值時已經就初始化了,并存儲在靜態內存塊中。
可變參數 int...f
一個方法的參數是可變參數可以不傳值。