天天看點

Java成員變量是自身、本類對象

如題,假如java類裡的成員變量是自身的對象,則建立該類對象時記憶體中怎麼配置設定空間,我感覺似乎死循環了。

不過我想的肯定是錯的,因為很多類的成員變量是自身對象,并且絕對無錯,舉個例子:

Class A{ 
private String b ="Hello"; 
private A a = new A(); 
} 

Class B{ 

public static void main(){ 
A p = new      

1.程式運作的時候會産生一個棧溢出錯誤的異常

Exception in thread “main” java.lang.StackOverflowError

你的思路是對的,在main方法中創一個A對象,而A對象在初始化自己成員的時候,又會創另一個A對象,進而造成死循環,最終導至記憶體溢出。

你的A類如下:

Class A{ 
private String b ="Hello"; 
private A a = new      

通常程式不會像你這樣寫,而是

Class A{ 
private String b ="Hello"; 
private A a; //= new A(); 
public anymothod(...){ 
//在某條件滿足時 
a=new      

也就是說類是自身成員的時候,通常不能初始化,而僅僅是一個定義,在滿足某些條件的時候,才去初始化,否則必然導至記憶體溢出。

2.可以給靜态的自身對象指派,如

Class A{ 
private String b ="Hello"; 
private static final A a = new