public class Test2 {
private static Inst it = new Inst("Test~!");
public Test2() {
// TODO Auto-generated constructor stub
it.getS();
System.out.println("构造函数初始化~!");
}
public static void display(){
// System.out.println(it.getS());
}
public static void main(String[] args) {
System.out.println("Start~!");
Test2 t2= new Test2();
t2.display();
System.out.println("End~!");
}
}
public class Inst {
private String s;
public Inst(String s) {
// TODO Auto-generated constructor stub
this.s = s;
System.out.println("chushihua");
}
public String getS() {
return s;
}
}

解决方案 »

  1.   

    结果是:
    chushihua
    Start~!
    构造函数初始化~!
    End~!
      

  2.   

    问题是:既然初始化在Start之前,为什么Test2构造函数中的it.getS()没有被调用?谢谢~!
      

  3.   


    it.getS()被调用了吧,只不过你在结果里看不到而已,因为你也没让系统打印出来呀。
    如果你想看结果,你可以把原来的it.getS();这行, 换成System.out.println(it.getS());
    试试
      

  4.   

    楼主我不明白你的意思,Test2构造函数中的it.getS()明显被调用了,你都没有输出语句,当然不会打印什么消息,随便在public String getS() {
    System.out.println("111");
    return s;
    }中打印消息都输出
      

  5.   

    大体看了下。希望楼猪能看看我写的东西。写就要涉及到类的加载机制了。首先类加载完成首先加载静态代码、代码块
    其次如果new,那么执行构造方法现在知道在Test2类加载后执行静态代码
    private static Inst it = new Inst("Test~!");
    那么会执行下面 public Inst(String s) {
    // TODO Auto-generated constructor stub
    this.s = s;
    System.out.println("chushihua");
    }那么首先输出chushihua
    Test2类加载完之后执行Test2的main方法
    开始输出Start~!
    然后执行Test2 t2 = new Test2();会执行构造器 public Test2() {
    // TODO Auto-generated constructor stub
    it.getS();
    System.out.println("构造函数初始化~!");
    }
    输出构造函数初始化~!最后执行
    System.out.println("End~!");