日期:2014-05-20  浏览次数:20813 次

程序初始化?
重读thinking in java在p111-p112发现了有不理解的地方
Java code

package com.fuyou;

class Bowl {
  Bowl(int marker) {
    System.out.println("Bowl(" + marker + ")");
  }
  void f(int marker) {
    System.out.println("f(" + marker + ")");
  }
}

class Table {
  static Bowl b1 = new Bowl(1);
  Table() {
    System.out.println("Table()");
    b2.f(1);
  }
  void f2(int marker) {
    System.out.println("f2(" + marker + ")");
  }
  static Bowl b2 = new Bowl(2);
}

class Cupboard {
  Bowl b3 = new Bowl(3);
  static Bowl b4 = new Bowl(4);
  Cupboard() {
    System.out.println("Cupboard()");
    b4.f(2);
  }
  void f3(int marker) {
    System.out.println("f3(" + marker + ")");
  }
  static Bowl b5 = new Bowl(5);
}

public class StaticInitialization {

  public static void main(String[] args) {  //断点
    System.out.println("Creating new Cupboard() in main");
    new Cupboard();
    System.out.println("Creating new Cupboard() in main");
    new Cupboard();
    t2.f2(1);
    t3.f3(1);
    
  }
  static Table t2 = new Table();
  static Cupboard t3 = new Cupboard();
}



在debug模式下,一点调试
出现了下面的:
Bowl(1)
Bowl(2)
Table() // 这句和下面的一句应该是table类构造函数运行才有的结果,这里只是刚加载,没有创建对象,为什么会调用Table类
f(1) //构造函数,导到这样的结果,这想不明白?还是有什么其它原因
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f(2)


------解决方案--------------------
static Table t2 = new Table();
static Cupboard t3 = new Cupboard();
 

Table的构造方法不在这里么
------解决方案--------------------
static Table t2 = new Table();
static Cupboard t3 = new Cupboard();
 

Table的构造方法不在这里么