代码如下:
public class Test10 {
{
a = 10;
}
int a = 20;
public static void main(String[] args) {
Test10 t = new Test10();
System.out.println("a的数值为:" + t.a);
}
}
上面的代码输出的是20;
如果**单纯是以代码的执行顺序直观上看,输出的确是20。**可是为什么是20呢?
后来我的加入了构造函数,代码如下
public class Test10 {
public Test10() {
a=30;
}
{
a = 10;
}
int a = 20;
public static void main(String[] args) {
Test10 t = new Test10();
System.out.println("a的数值为:" + t.a);
}
}
a就变为30了,这是为什么呢? 我知道普通代码块比构造函数先执行,所以最后为什么不是像第一个试验一样为20?
内部的执行顺序到底是怎么?
还有为什么代码能够编译通过?
查询了一些资料,我写成了博客。有兴趣的朋友可以去看看---
http://blog.csdn.net/hon_3y/article/details/54616034
ps:如果有理解错误的地方,请告诉我,谢谢