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 关于大棚监测的pcb板设计
  • ¥20 sim800c模块 at指令及平台
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计