gpt4 book ai didi

java - 如何在使用之前加载 java 类和静态初始化?

转载 作者:行者123 更新时间:2023-11-30 07:17:12 30 4
gpt4 key购买 nike

我需要加载一些类以及它们各自的静态初始化,例如,在工厂方法实现中。

如果我只是使用下面的语法引用类,JVM 不会运行静态初始化部分。实际上,JVM 甚至加载类吗?

Class<Shape> shapeClass = Shape.class;
或者
Shape s = null;

但是对于 class.forname() 它确实执行静态初始化。 Class.forname("Shape");问题是这是否是加载 java 类和静态初始化的唯一方法?或者还有其他方法吗?使用 class.forname() 有什么明显的性能损失?

最佳答案

来自 Class.forName(String className) API:调用此方法等效于:Class.forName(className, true, currentLoader)

第二个参数=true表示初始化类,初始化类表示运行静态初始化器

这是一个要检查的测试

package test;

class Test2 {
static {
System.out.println("static init");
}
}

public class Test1 {

public static void main(String[] args) throws Exception {
Class.forName("test.Test2");
}
}

输出

static init

但是如果你用

加载 Test2
Class.forName("test.Test2", false, ClassLoader.getSystemClassLoader());

不会有输出。您还可以使用此测试来查看 Test.class.getName() 也没有加载该类。

让它加载的最简单方法是添加一个空的静态方法并调用它:

class Test2 {
public static void load() {
}
...
Test2.load();

关于java - 如何在使用之前加载 java 类和静态初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16354027/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com