class A
{
public void method()
{
double b[]=new double[10000];
System.out.println("over");
}
}
class test
{
public static void main(String args[])
{
A obj=new A();  //这里给double数组分配内存吗?
obj.method();   //还是这里??
}
}

解决方案 »

  1.   

    要清楚成员变量和局部变量的区别,成员变量分配在new出来的时候在堆中就分配了内存,他在编译的时候不分配内存,只有在运行的时候分配,而局部变量则是在栈中分配,方法中定义的变量相当于局部变量,方法存在于代码区,他只有在运行的时候才会被加载,所以他在obj.method(); 时候才会分配内存。
      

  2.   

    在 obj.method()分配,b数组是方法中的一个变量。只有当运行到方法时才分配内存。
      

  3.   


    class A
    {
        public void method()
        {
            double b[]=new double[10000];
            System.out.println("over");
        }
    }
    class test
    {
        public static void main(String args[])
        {
            A obj=new A();  //这里给double数组分配内存吗?---->new一个A的对象的时候,只是调用的A的构造函数,并不会执行他的方法
            obj.method();   //还是这里??-------------------->调用方法的时候,才会执行方法里的new一个局部变量double b[]此时才会给数组分配空间。 
        }
    }
      

  4.   

    执行  A a = new A(); 的时候是执行了类A中的无参构造方法,每个类中如果没有显示写出一个构造方法的时候,系统会提供一个默认的构造方法。
    class A
    {
        public A() {}//执行A a = new A();的时候只执行了这句话
        public void method()
        {
            double b[]=new double[10000];
            System.out.println("over");
        }
    }
    在执行obj.method()的时候才执行A中的method()方法