程序的第一步为什么不是输出Creating new Cupboard() in main

解决方案 »

  1.   

    因为一个类别加载的时候就已经初始化所有的静态成员了,
    要运行main函数首先就要加载这个类的
      

  2.   

      你这不是thinking in java 上例子的吗?上面应该已经说得很明白了!!!!!!
      

  3.   

    静态变量初始化是在类被初次调用的瞬间发生的,类中的非静态变量是在进入构造函数内部前初始化的,记住这两点,就可以很清楚地理解你的输出1. static Table t2 = new Table();
    第一次调用Table
    ==>static Bowl b1 = new Bowl(1);
    ==>static Bowl b2 = new Bowl(2);
    ==>Table() {
        System.out.println("Table()");
        b2.f(1);
      }2. static Cupboard t3 = new Cupboard();
    第一次调用Cupboard
    ==>static Bowl b4 = new Bowl(4);
    ==>static Bowl b5 = new Bowl(5);
    ==>Cupboard()
    ==>Bowl b3 = new Bowl(3);
    ==>{
        System.out.println("Cupboard()");
        b4.f(2);
      }3. System.out.println("Creating new Cupboard() in main");4. new Cupboard();
    ==>Cupboard()
    ==>Bowl b3 = new Bowl(3);
    ==>{
        System.out.println("Cupboard()");
        b4.f(2);
      }5. System.out.println( "Creating new Cupboard() in main");6. new Cupboard();
    ==>Cupboard()
    ==>Bowl b3 = new Bowl(3);
    ==>{
        System.out.println("Cupboard()");
        b4.f(2);
      }7. t2.f2(1);
    8. t3.f3(1);
      

  4.   

    我是新手.这两天被初始化搞的昏头转向的.
    我讲讲我的理解,请大虾们看看对不对.
    用new关键字生成一个类对象时,或是执行main函数时,首先要初始化所有的静态变量,然后
    初始化所有的其他变量.然后再执行调用的程序块,是吗
      

  5.   

    明白明白!
    谢谢karma(无为)的耐心讲解!
    让新手们再看看,下午给分!
      

  6.   

    当涉及到一个类时总会生成静态成员;然后若要生成这个类的实例,再调用initializer(默认的或人为创建的);调用构件器;完成创建。若运行一个类则会在初始化完静态成员后进入main这个入口,不会创建类的实例,除非在main的实现里有new出实例的代码。