<span style="font-size:18px;">class A{
public static int X;
static {X=B.Y+1;}
}</span>
<span style="font-size:18px;">
public class B{
public static int Y=A.X+1;
static{}
public static void main(String[] args){
System.out.println("X = "+A.X+",Y = "+B.Y);
}
}</span>
<span style="font-size:18px;">以上程序编译是否能通过?结果为多少?</span>
<span style="font-size:18px;">X=1,Y=2</span>
<span style="font-size:18px;"></span><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; line-height: 24px; font-family: 'Microsoft YaHei'; font-size: 14px; color: rgb(51, 51, 51); word-break: break-all; word-wrap: break-word;">原理分析:<br style="box-sizing: border-box;" />首先加载class b,运行b的静态代码块<br style="box-sizing: border-box;" />y=a.x+1 实际是运行:<br style="box-sizing: border-box;" />y=0 ;<br style="box-sizing: border-box;" />y=a.x+1;</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; line-height: 24px; font-family: 'Microsoft YaHei'; font-size: 14px; color: rgb(51, 51, 51); word-break: break-all; word-wrap: break-word;">运行y=a.x+1这一句时,因为用到a的非final static 属性,所以要先加载class a<br style="box-sizing: border-box;" />a.x=0;<br style="box-sizing: border-box;" />a.x=b.y+1=0+1=1<br style="box-sizing: border-box;" />class a加载完</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; line-height: 24px; font-family: 'Microsoft YaHei'; font-size: 14px; color: rgb(51, 51, 51); word-break: break-all; word-wrap: break-word;">那么y=a.x+1=1+1=2<br style="box-sizing: border-box;" />class b加载完</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; line-height: 24px; font-family: 'Microsoft YaHei'; font-size: 14px; color: rgb(51, 51, 51); word-break: break-all; word-wrap: break-word;">运行main 方法<br style="box-sizing: border-box;" />输出X = 1,Y = 2</p>