2015-07-11 76 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。

相关问题