java 种的初始化1
java 类的初始化1
第一次
class Person{
public static final int a=new Random().nextInt(40);
static{
System.out.println("类被初始化");
}
}
public class Test01 {
public static void main(String[] args) {
System.out.println(Person.a);
}
}
运行结果
类被初始化
31
第二次
class Person{
public static final int a=4/2;
static{
System.out.println("类被初始化");
}
}
public class Test01 {
public static void main(String[] args) {
System.out.println(Person.a);
}
}
运行结果
2
个人理解
第二次的a是一个编译时的常量,在使用这个常量的时候不属于类的主动使用,不会导致Person类的初始化,而第一次的a只有在运行时才可以确定值,并不是一个编译时的常量属于主动使用会初始化Person类
第一次
class Person{
public static final int a=new Random().nextInt(40);
static{
System.out.println("类被初始化");
}
}
public class Test01 {
public static void main(String[] args) {
System.out.println(Person.a);
}
}
运行结果
类被初始化
31
第二次
class Person{
public static final int a=4/2;
static{
System.out.println("类被初始化");
}
}
public class Test01 {
public static void main(String[] args) {
System.out.println(Person.a);
}
}
运行结果
2
个人理解
第二次的a是一个编译时的常量,在使用这个常量的时候不属于类的主动使用,不会导致Person类的初始化,而第一次的a只有在运行时才可以确定值,并不是一个编译时的常量属于主动使用会初始化Person类