我们在java的main()方法中声明变量,获取实例化为对象吗?

时间:2015-07-11 11:42:25

标签: java

我要问的是,如果我在java中的类的main()内声明一个数据成员,它是否会被实例化为该类对象的对象缓冲区? 例如:

class Demo{

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

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

此处,int y是否会在类d的对象Demo中实例化。如果没有,如何分配内存?它会被视为局部变量吗?

2 个答案:

答案 0 :(得分:3)

不,ymain方法中被实例化为堆栈上的简单局部变量,因此它仅在该范围内可用。与任何其他局部变量一样,它会在其范围退出时被销毁,因此在这种情况下,y会在main退出时被销毁。

同样,dmain中的局部变量,但它指向的(em {{>}对象(在这种情况下为Demo个对象)已分配在堆上。就像堆上的任何其他对象一样,当没有其他引用指向它时,它将被垃圾收集。当然,在这种情况下,d是从main方法的本地范围内指向它的引用,因此当d为no时,该对象将仅被垃圾收集更长的时间(即main退出后)。

然后还有多线程增加的额外复杂性,这使得对象的生命周期更难以推理。

答案 1 :(得分:2)

将为每个Demo实例创建一个单独的x实例化。每次主运行时都会实例化一个单独的y。