重读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的构造方法不在这里么