`Unstoppable `
2020-03-03 09:16
采纳率: 45.5%
浏览 462
已采纳

类加载的顺序问题,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条回答 默认 最新

  • 懵懵的小哥 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变量以及方法放在公共区域,属于平行关系。

    打赏 评论
  • -Wo wo. 2021-04-22 08:59

    可以看看我写的static文章

    有关static的用法总结详解:https://blog.csdn.net/u012011079/article/details/115799789
    (欢迎各位大佬斧正,里面包含了设计过程的static、面向对象的static、类模板含有static的解析)

    打赏 评论

相关推荐 更多相似问题