MY_MySign 2016-10-13 10:05 采纳率: 33.3%
浏览 1071
已采纳

关于静态成员的初始化和静态代码块的初始化

 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

  • 写回答

2条回答 默认 最新

  • 「已注销」 2016-10-13 16:23
    关注

    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 代码块");
    }
    

    再看下输出,或许你就明白了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题