public class B {
public static int Y = A.X+1;
static{
System.out.println(A.X);
}
public static void main(String[] args) {
System.out.println("X:"+A.X + "Y:"+B.Y);
}
}
class A{
public static int X ;
static{
// B.Y = 0;为什么。。
// 先走静态成员的初始化,再走静态代码块
X = B.Y + 1;
System.out.println("*********"+B.Y);
}
}
代码如上,运行结果为:
*********0
1
X:1Y:2
不理解为什么A中静态代码块的B.Y为0
main(String[] args)
方法是java程序入口对吧,
那么第一个加载的类就是B,而且初始化(这里Y=0,因为先初始化,然后才赋值),
好了,有static
关键字描述的代码在类加载的时候要执行一次,
执行到public static int Y = A.X+1;
,
此时去加载A类并初始化,执行static
描述的代码,
到了X = B.Y + 1;
这一步,B.Y=?,因为之前初始化B.Y = 0;
所以X = 0 + 1;
,后面的看输出。
这里的关键是什么呢?答案是代码是按**顺!序!执!行!**的
你可以在B类的public static int Y = A.X+1;
语句上面添加
static {
System.out.println("B static 代码块");
}
再看下输出,或许你就明白了。
http://www.cnblogs.com/100thMountain/p/5374423.html
http://blog.csdn.net/deadpanda/article/details/5307932