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 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位
  • ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致
  • ¥15 QFILHelper怎么恢复全字库,提示进程已完成,只能恢复分区文件
  • ¥150 求 小魔指游戏板整合模拟软件
  • ¥20 你好,我想问下easyExcel下拉多选,或者复选框可以实现吗
  • ¥20 双非跨考工科哪个专业和方向就业前景好?
  • ¥20 求会6sv辐射传输模型,辅导(可py6s🙏🏻有偿
  • ¥15 .xla后缀的文件拖到excel里什么内容也没有怎么办
  • ¥20 Workbench中Mechanical打不开、闪退是什么原因?