`Unstoppable ` 2020-03-03 09:16 采纳率: 0%
浏览 545
已采纳

类加载的顺序问题,static属性在前还是static方法在前

class Insect{
    private int i = 9;
    protected int j;
    Insect(){
        j = 39;
    }
    private static int x1 = printInit("static Insect.x1 initialized");
    static int printInit(String s){
        System.out.println(s);
        return 47;
    }
}

类加载的顺序应该是1、static属性;2、static方法。
那么应该是private static int x1先执行,然后执行static int printInit方法。
但是属性定义时需要调用printInit方法,这是怎么调用的?

  • 写回答

2条回答 默认 最新

  • Okay6 2020-03-03 09:22
    关注
    public class Study23 {
        private static int x1 = printInit("static Insect.x1 initialized");
        static int printInit(String s){
            //输出 Test Message
            System.out.println(msg);
            System.out.println(s);
            return 47;
        }
        static  String msg = "Test Message";
    }
    

    可以看到static变量 msg 定义在 printInit方法之后,但是我们却在之前引用了它,而且代码并没有报错。其实static类型的变量以及方法是程序运行期间一直存在的,是类级别的变量。所以static变量及方法间引用是不区分先后顺序的。jvm译时会将static变量以及方法放在公共区域,属于平行关系。

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

报告相同问题?

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭