假设我有一些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?
}
}
如果该类有其他静态成员和方法,如果只在我调用其中一个时加载,那么其他方法也会被加载?
答案 0 :(得分:3)
静态方法(以及非静态方法和静态/成员变量)不直接加载到内存中:声明类完整地加载到内存中,包括所有声明的方法和字段。因此,加载静态/非静态方法/字段的方式没有区别。
类仅在第一次被其他代码引用时由类加载器加载。这构成了Initialization on demand idiom。
的基础答案 1 :(得分:2)
在第一次调用static
方法时(其他条件),将加载您的类。请参阅reference。
答案 2 :(得分:1)
答案 3 :(得分:0)