java类的加载顺序,静态块 非静态块 构造器的执行顺序
类对象的初始化过程顺序
-
CSND博客: Java类对象的初始化过程顺序
-
码云源码: lishuoboy-interview
一、先上结论
-
对于变量、代码块,构造器
- 先静态后成员,先父后子,先变量+代码块(多个按代码顺序),后构造器
- 静态只加载一次
- 注意: instanceMethod() 被子类重写了
-
对于方法
- 只有被调用时才执行
二、测试代码
父类
package top.lishuoboy.javase.jvm.class_load;
/** 见README.md */
public class Father {
/** 静态类变量 */
private static int i = classMethod();
/** 实例变量 */
private int j = instanceMethod();
/** 静态代码块 */
static {
System.out.println("②-父-静态代码块");
}
/** 实例代码块 */ {
System.out.println("④-父-实例代码块");
}
/** 构造器 */
public Father() {
// super(); // 写不写都在
System.out.println("⑤-父-构造器");
}
protected static int classMethod() {
System.out.println("①-父-静态变量");
return 1;
}
/** 被子类重写了 */
protected int instanceMethod() {
System.out.println("③-父-成员变量");
return 1;
}
}
子类
package top.lishuoboy.javase.jvm.class_load;
/** 见README.md */
public class Son extends Father {
/** 静态类变量 */
private static int i = classMethod();
/** 实例变量 */
private int j = instanceMethod();
/** 静态代码块 */
static {
System.out.println("②-子-静态代码块");
}
/** 实例代码块 */ {
System.out.println("④-子-实例代码块");
}
/** 构造器 */
public Son() {
// super(); // 写不写都在
System.out.println("⑤-子-构造器");
}
protected static int classMethod() {
System.out.println("①-子-静态变量");
return 1;
}
@Override
protected int instanceMethod() {
System.out.println("③-子-成员变量");
return 1;
}
}
测试
package top.lishuoboy.javase.jvm.class_load;
import org.junit.Test;
/** 见README.md */
public class SonTest {
@Test
public void TestClassInit() {
new Son();
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
new Son();
}
}
输出结果
①-父-静态变量 ②-父-静态代码块 ①-子-静态变量 ②-子-静态代码块 ③-子-成员变量 ④-父-实例代码块 ⑤-父-构造器 ③-子-成员变量 ④-子-实例代码块 ⑤-子-构造器 @@@@@@@@@@@@@@@@@@@@@@@@@@@@ ③-子-成员变量 ④-父-实例代码块 ⑤-父-构造器 ③-子-成员变量 ④-子-实例代码块 ⑤-子-构造器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具