public class A{
private B b;//引用類型變量
}
public class B{
}
new A();//對象
1、引用類型變量和對象的區別
聲明的對象是在堆內存中初始化的, 真正用來存儲數據的。不能直接訪問。
引用類型變量是保存在棧當中的,一個用來引用堆中對象的符號而已(指針)
2、成員變量與局部變量的區別
局部變量,在方法內部聲明,當該方法運行完時,內存即被釋放。
成員變量,只要該對象還在,哪怕某一個方法運行完了,還是存在
在裝載類的時候,加入方法區中的所有信息,最後都會形成Class類的實例,代表這個被裝載的類。方法區中的所有的信息,都是可以通過這個Class類對象反射得到。我們知道對象是類的實例,類是相同結構的對象的一種抽象。同類的各個對象之間,其實是擁有相同的結構(屬性),擁有相同的功能(方法),各個對象的區別只在於屬性值的不同。
同樣的,我們所有的類,其實都是Class類的實例,他們都擁有相同的結構-----Field數組、Method數組。而各個類中的屬性都是Field屬性的一個具體屬性值,方法都是Method屬性的一個具體屬性值。
4、方法什麼時候設計爲靜態,什麼時候爲非靜態
對象是類的一個實例,各個對象結構相同,只是屬性不同。
而靜態方法是對象無法調用的。
所以,靜態方法適合那些工具類中的工具方法,這些類只是用來實現一些功能,也不需要產生對象,通過設置對象的屬性來得到各個不同的個體。
方法區:類的基本信息(每個類的全限定名,每個類的直接超類的全限定名(可約束類型轉換),該類是類還是接口,該類型的訪問修飾符,直接超接口的全限定名的有序列表),運行時常量池(如文字字符串、final變量值、類名和方法名常量),字段信息( 字段的名、類型、修飾符),方法信息(方法名、返回值類型、參數類型、修飾符、異常、方法的字節碼),靜態變量(即類變量,靜態變量和靜態塊)
Java棧:以幀的形式存放本地方法的調用狀態,包括方法調用的參數、局部變量、中間結果(局部變量區爲一個以字爲單位的數組,每個數組元素對應一個局部變量的值。調用方法時,將方法的局部變量組成一個數組,通過索引來訪問。若爲非靜態方法,則加入一個隱含的引用參數this,該參數指向調用這個方法的對象。而靜態方法則沒有this參數。因此,對象無法調用靜態方法。)