创建对象时类的调用顺序
代码块
1.创建一个对象时,在一个类中调用的顺序是:
1.调用静态代码块和静态属性初始化(优先级相同,如果有多个,则按他们定义的顺序调用) 2.调用普通代码块和普通属性的初始化(优先级相同,如果有多个,则按他们定义的顺序调用) 3.构造方法是最后才调用
实例:
package com.example.Codeblock; /** * @author gaoqinghui * @date 2022/4/26 22:35 public class CodeBlockDetail02 { public static void main(String[] args) { Detail01 detail01 = new Detail01(); } } class Detail01 { private int n2 = getN2(); //非静态属性 //普通代码块 { System.out.println("Detail01普通代码块被执行"); } //下面这个是静态属性初始话,调用顺序的优先级和静态代码块相同 //如果都两个都有,按放置的位置来决定谁先背调用 private static int n1 = getN1(); static { System.out.println("Detail01静态代码块被执行"); } public static int getN1() { System.out.println("getN1被调用"); return 100; } public int getN2() { //非静态方法 System.out.println("getN2被调用"); return 200; } //无参构造器 public Detail01() { System.out.println("Detail01()构造器被调用"); } }
2.构造器的最前面其实隐含了super()和调用普通代码块,但是静态相关的代码块和静态属性初始化是最先执行的,不管在什么时候,因为在类加载时就执行了静态相关的代码块和静态属性初始化。
package com.example.Codeblock; /** * @author gaoqinghui * @date 2022/4/26 23:03 */ public class CodeBlockDetail03 { public static void main(String[] args) { new BBB(); //输出结果:1.AAA的静态代码块被执行 2.AAA()构造器被执行 3.BBB普通代码块被执行 4.BBB()构造器被执行 } } class AAA { //进来后先找静态代码块,再找普通代码块,再找构造器 static { System.out.println("AAA的静态代码块被执行"); } public AAA() { //super(); 去找object的构造器 //本类普通代码块 System.out.println("AAA()构造器被执行"); } { System.out.println("AAA的普通代码块被执行"); } } class BBB extends AAA{ { System.out.println("BBB普通代码块被执行"); } public BBB() { //super(); 去到父类中先找静态代码块,再找普通代码块,再找构造器 //调用本类普通代码块 System.out.println("BBB()构造器被执行"); } }
3.创建一个子类时(有继承关系),他们的静态代码块、静态属性初始化、普通代码块、普通属性初始化,构造方法的调用顺序如下:
1. 父类的静态代码块和静态属性初始化(优先级一样,按定义顺序执行); 2. 子类的静态代码块和静态属性初始化(优先级一样,按定义顺序执行); 3. 父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行); 4. 父类的构造方法; 5. 子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行); 6. 子类的构造方法;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报