静态方法总是加载到内存中吗?

时间:2016-01-11 13:39:19

标签: java static static-methods

假设我有一些Java项目,其中有一些" Utils"类,以及这些类只有static方法和成员。

运行应用程序后,这些方法和成员是否会自动加载到内存中?或者只有在我沿着代码调用类时才会发生这种情况?

编辑:一些示例代码来说明我的问题。

RandomUtils.java

public class RandomUtils {

    private static Random rand = new Random();

    public static int randInt(int min, int max) {
        // nextInt is normally exclusive of the top value,
        // so add 1 to make it inclusive
        return rand.nextInt((max - min) + 1) + min;
    }
}

MainClass.java

public class MainClass {
        public static void main(String[] args) {
            // Some other operations. Is my class already loaded here?

            int randomNumber = RandomUtils.randInt(1,10); // Or is it only loaded here?
        }
}

如果该类有其他静态成员和方法,如果只在我调用其中一个时加载,那么其他方法也会被加载?

4 个答案:

答案 0 :(得分:3)

静态方法(以及非静态方法和静态/成员变量)不直接加载到内存中:声明类完整地加载到内存中,包括所有声明的方法和字段。因此,加载静态/非静态方法/字段的方式没有区别。

类仅在第一次被其他代码引用时由类加载器加载。这构成了Initialization on demand idiom

的基础

答案 1 :(得分:2)

在第一次调用static方法时(其他条件),将加载您的类。请参阅reference

答案 2 :(得分:1)

静态方法只在您调用class时加载一次。enter image description here

college =“ITS”是一个静态变量

答案 3 :(得分:0)

一旦你打电话给它,就会发生这种情况。