Java中不会加载子类的几种情况

1.调用父类的static成员或方法

父类

package classloaddemo;

public class User {
	static {
		System.out.println("User 被加载!");
	}
	public static int a = 1;
	public static final int b = 1;

	public static void say() {
		System.out.println("Hello!");
	}
}

子类

package classloaddemo;

public class Admin extends User {
	static {
		System.out.println("Admin 被初始化!");
	}
}

测试

package classloaddemo;

public class LoderTest {
	public static void main(String[] args) {

		System.out.println(Admin.a);
		Admin.say();
	}
}

运行结果

User 被加载!
1
Hello!

可以看的,子类调用父类的静态成员和方法时,是不会初始化子类的

2.子类调用父类的final成员

测试类

package classloaddemo;

public class LoderTest {
	public static void main(String[] args) {
		System.out.println(Admin.b);
	}
}

输出结果

1

因为常量在编译时就已经确定,并被放到了常量池,所有调用时,不仅子类不会初始化,父类也不会初始化

3.通过数组引用

public class LoderTest {
	public static void main(String[] args) {
		User[] users = new User[100];
	}
}

这种很容易理解,数组初始时全为null,数组中根本不存在实例成员,所有不会触发类加载

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页