// Java类加载示例代码
// 定义一个简单的类
public class MyClass {
static {
System.out.println("MyClass is being loaded.");
}
public static void main(String[] args) {
// 加载并初始化另一个类
ClassLoader classLoader = MyClass.class.getClassLoader();
try {
Class<?> clazz = classLoader.loadClass("AnotherClass");
System.out.println("AnotherClass has been loaded but not initialized yet.");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
// 定义另一个类
class AnotherClass {
static {
System.out.println("AnotherClass is being initialized.");
}
}
MyClass
和 AnotherClass
中都有静态块 (static {}
)。静态块在类被加载时执行,用于初始化类。MyClass
中使用 ClassLoader
来加载 AnotherClass
。loadClass
方法只加载类但不会初始化它(即不会执行静态块),除非该类被显式使用。MyClass
时,首先会输出 MyClass is being loaded.
,因为 MyClass
被加载并初始化。loadClass("AnotherClass")
加载 AnotherClass
,但不会立即初始化它,所以此时不会输出 AnotherClass is being initialized.
。AnotherClass
的静态成员或实例,则会触发其初始化。通过这个例子可以理解 Java 类加载机制中的类加载和类初始化的区别。
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站