本帖最后由 liuyuanyuan0802 于 2011-07-26 01:12:30 编辑

解决方案 »

  1.   

    在第二步中。。是谁对变量初始化 给默认值的。。只有这么不明白。。是JVM吗?
      

  2.   

    在第二步中是JVM给变量初始化的。
    例如:
    public class MyJava {
        private int a = 5;
        private int b;    public MyJava() {
            System.out.println(a);
            System.out.println(b);
        }    // 这是非静态代码块
        {
            b = 60;
        }
    }
    如果你要new一个MyJava对象,它的过程是这样的。
    1、看你MyJava这个类加载了没,没有的话就按我之前说的,对类进行加载、连接、初始化。
    2、为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值。这里将属性a和b的值都设置成了0,这是由JVM完成的。
    3、初始化对象,给实例变量赋予正确的初始值。这里执行“a = 5”(这是在声明a时的显式初始化)及“b = 60”(这是在非静态代码块中的显式初始化)。
    4、执行构造方法,输出“5和60”。
    5、返回MyJava对象在堆区中的地址。
      

  3.   


    返回MYJava对象在堆中的地址是不是存放在对象变量里面?  这样就完成对象的初始化了 可以使用对象了 是吗?
      

  4.   

    MyJava obj = new MyJava();在堆区中创建的MyJava对象地址就存放在obj引用变量中。
    然后就可以用了