Java內存分配

public class A{

private B b;//引用類型變量

}

public class B{

}

new A();//對象

1、引用類型變量和對象的區別

聲明的對象是在堆內存中初始化的, 真正用來存儲數據的。不能直接訪問。

引用類型變量是保存在棧當中的,一個用來引用堆中對象的符號而已(指針)

2、成員變量與局部變量的區別

局部變量,在方法內部聲明,當該方法運行完時,內存即被釋放。
成員變量,只要該對象還在,哪怕某一個方法運行完了,還是存在

3、反射的基礎

在裝載類的時候,加入方法區中的所有信息,最後都會形成Class類的實例,代表這個被裝載的類。方法區中的所有的信息,都是可以通過這個Class類對象反射得到。我們知道對象是類的實例,類是相同結構的對象的一種抽象。同類的各個對象之間,其實是擁有相同的結構(屬性),擁有相同的功能(方法),各個對象的區別只在於屬性值的不同
    同樣的,我們所有的類,其實都是Class類的實例,他們都擁有相同的結構-----Field數組、Method數組。而各個類中的屬性都是Field屬性的一個具體屬性值,方法都是Method屬性的一個具體屬性值。

4、方法什麼時候設計爲靜態,什麼時候爲非靜態

對象是類的一個實例,各個對象結構相同,只是屬性不同。
而靜態方法是對象無法調用的。
所以,靜態方法適合那些工具類中的工具方法,這些類只是用來實現一些功能,也不需要產生對象,通過設置對象的屬性來得到各個不同的個體。


方法區:類的基本信息(每個類的全限定名每個類的直接超類的全限定名(可約束類型轉換)該類是類還是接口該類型的訪問修飾符直接超接口的全限定名的有序列表)運行時常量池(如文字字符串、final變量值、類名和方法名常量),字段信息( 字段的名、類型、修飾符),方法信息(方法名、返回值類型、參數類型、修飾符、異常、方法的字節碼),靜態變量(即類變量,靜態變量和靜態塊

Java棧:的形式存放本地方法調用狀態,包括方法調用的參數局部變量、中間結果(局部變量區爲一個以字爲單位的數組,每個數組元素對應一個局部變量的值。調用方法時,將方法的局部變量組成一個數組,通過索引來訪問。若爲非靜態方法,則加入一個隱含的引用參數this,該參數指向調用這個方法的對象。而靜態方法則沒有this參數。因此,對象無法調用靜態方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章