Java 面向对象 - 触发类的初始化,执行其中的 static 块(包含不会触发初始化的情况)
·
触发类的初始化,执行其中的 static 块
- 访问 static 字段
public class SomeClass {
static {
System.out.println("static block executed");
}
public static int num = 100;
}
int num = SomeClass.num;
- 访问 static 方法,可以使用空方法(推荐)
public class SomeClass {
static {
System.out.println("static block executed");
}
public static void init() {
}
}
SomeClass.init();
- 创建实例
public class SomeClass {
static {
System.out.println("static block executed");
}
}
SomeClass someClass = new SomeClass();
- 使用
Class.forName()加载类
try {
Class.forName("com.my.SomeClass");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
不会触发初始化的情况
- 访问
.class
public class SomeClass {
static {
System.out.println("static block executed");
}
}
Class<?> clazz = SomeClass.class;
- 访问编译期常量(static final 基本类型或 static final String)
public class SomeClass {
static {
System.out.println("static block executed");
}
public static final int num = 100;
public static final String str = "hello world";
}
int num = SomeClass.num;
String str = SomeClass.str;
- 访问非编译期常量,可以触发类的初始化
public class SomeClass {
static {
System.out.println("static block executed");
}
public static final Object token = new Object();
}
Object token = SomeClass.token;
更多推荐



所有评论(0)