2015-07-11 78 views
1

我問的是如果我聲明在java類的main()內的數據成員將它實例化爲該類的對象的對象緩衝區? 例如:做我們在java的main()方法中聲明的變量,是否被實例化爲對象?

class Demo{ 

    int x=10; 
    public static void main(String... s){ 

     int y=20; 
     Demo d=new Demo(); 
    } 
} 

在此,將在int y被在對象Demo類的d實例化。如果不是,分配給它的內存如何?它會被視爲局部變量嗎?

+0

你在'main'頭中使用了可變參數...我喜歡你。 –

+0

是的,它會是局部變量 – Rustam

回答

3

不,ymain方法的堆棧中被實例化爲一個簡單的局部變量,所以它只在該範圍內可用。像任何其他局部變量一樣,當其範圍退出時它將被銷燬,所以在這種情況下,main退出時將銷燬y

同樣,d是在main一個局部變量,但對象它指向(一個Demo對象,在這種情況下)是在堆上分配。就像堆上的其他對象一樣,當沒有其他引用指向它時,它將被垃圾收集。當然,在這種情況下,d是從main方法的本地範圍內指向它的參考,因此當d不再指向它時(即在main退出之後),對象將僅被垃圾收集。

然後有多線程增加了額外的複雜性,這使得對象的生命週期和更難以推理。

2

一個單獨的x將會在Demo的每個實例創建時被實例化。每次運行主程序時,都會實例化一個單獨的y。

相關問題