一个关于static的经典题目

<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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值