为何调用另一个有参数的构造方法时又打印出a=10?--代码分析疑问(有关静态块和this的用法。)
以下是有关Thinking In JAVA的一段代码。其中红色部分不知为何?为何调用另一个有参数的构造方法时又打印出a=10?不是已经在非静态的块中赋值为8了吗?
请看代码及测试结果分析:
public class TestStaticCon {
static int a=0;
static {
a=10;
System.out.println("静态程序块中A="+a);
}
{
a=8;
System.out.println("非静态程序块中A="+a);
}
public TestStaticCon(){
this("a 带参构造方法中的值: " + a);
// 调用另外一 个构造方法
System.out .println( a);
System. out .println(" 无参构造方法在执行 a=" + a);
}
public TestStaticCon(String str) {
System. out .println(str);
System.out .println(a);
}
public static void main(String args[]){
System.out.println("开始测试");
TestStaticCon test = null ;
System.out.println("声明结束");
test =new TestStaticCon();
}
}
测试结果:
静态程序块中A=10
开始测试
声明结束
非静态程序块中A=8
a 带参构造方法中的值: 10
8
8
无参构造方法在执行 a=8 代码分析 --------------------编程问答-------------------- http://tieba.baidu.com/p/1555624175
这里看到的答案做个搬运工吧,还有很多东西要学啊
======================【非原创】======================================
实际的执行过程是这样的..
首先,static { ... },这时候a的值是10
其次,默认构造器TestStaticCon(),首先为this(String)准备参数,参数就是"..." + a,这时候a的值是10,注意默认构造器尚未执行完
再次,调用有参构造器,在有参构造器中首先之行的是初始化,也就是{ a = 8 }这部分,尽管这与大多数家伙的认识不符,但事实就是这样
最后,完成默认构造器调用..
因为我是看的javap -verbose,所以有作弊之嫌!
============================================================= --------------------编程问答-------------------- 这个用的太少了。。。
补充:Java , Java EE