什么时候会发生类初始化

package com.test5;
public class test6 {
static {
System.out.println("Main类被加载");
}
public static void main(String[] args) throws ClassNotFoundException {
// 1.主动引用
//Son son = new Son();
/**
* 运行结果 Main类被加载 父类被加载了 子类被加载了
*/
//反射也会产生主动调用
//Class.forName("com.test5.Son");
/**
* 运行结果 Main类被加载 父类被加载了 子类被加载了
*/
//不会产生类的引用方法
//System.out.println(Son.b);
/**
* 运行结果 Main类被加载 父类被加载了 2
*/
//Son[] array=new Son[5];
/**
* 运行结果 Main类被加载
*/
System.out.println(Son.M);
/**
* 运行结果 Main类被加载 1
*/
}
}
class Father {
static int b = 2;
static {
System.out.println("父类被加载了");
}
}
class Son extends Father {
static {
System.out.println("子类被加载了");
m = 300;
}
static int m = 100;
static final int M = 1;
}

本文通过一个Java代码示例,详细解析了类初始化(类加载)的触发条件,包括主动引用和被动引用的情况。例如,创建类实例、访问静态变量和方法、反射调用等都会导致类初始化。同时,展示了不同操作如何影响类加载的顺序和行为。
1261

被折叠的 条评论
为什么被折叠?



