当前位置: 代码迷 >> J2SE >> 程序初始化
  详细解决方案

程序初始化

热度:140   发布时间:2016-04-24 12:41:46.0
程序初始化?
重读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的构造方法不在这里么
  相关解决方案