静态变量,静态代码块,构造函数,构造代码块执顺序

本文详细解析了在不同情况下构造函数与构造代码块的执行逻辑,包括无参构造、多次调用构造函数及继承时的情况。通过阅读本文,读者可以深入理解构造函数与代码块的执行机制。

①第一种情况
在这里插入图片描述
在调用无参构造的情况下,会执行构造代码块

②第二种情况
在这里插入图片描述
在不调用无参构造的情况下,不会执行构造代码块

③第三种情况
在这里插入图片描述
在多次调用构造函数的情况下,构造代码块和构造函数执行完毕,再另外去执行

④第四种情况
在这里插入图片描述

⑤对于继承时
在这里插入图片描述

关注公众号
在这里插入图片描述

每周会更新干货知识

Java 中,成员变量、代码块构造函数顺序会因是否涉及继承而有所不同。 ### 不涉及继承时 1. 成员变量会先完成初始化。成员变量是类的属性,在对象创建时就会进行初始化操作。 2. 构造代码块会在成员变量初始化之后行。构造代码块的作用是给对象进行初始化,对象一建立就运行构造代码块,且优先于构造函数行。它是给所有对象进行统一初始化,定义的是不同对象共性的初始化内容[^1]。 3. 构造函数最后行。构造函数是给对应的对象初始化,因为构造函数可以有多个,运行哪个构造函数就会建立什么样的对象[^1]。 ### 涉及继承时 按照如下顺序行: 1. 行父类的静态代码块,并初始化父类静态成员变量。静态代码块在类加载时行,且只行一次。 2. 行子类的静态代码块,并初始化子类静态成员变量。 3. 行父类的构造代码块行父类的构造函数,并初始化父类普通成员变量。 4. 行子类的构造代码块行子类的构造函数,并初始化子类普通成员变量[^2]。 以下是一个示例代码,展示了上述顺序: ```java class Father { static String f = "父类静态变量"; static { System.out.println("父类静态代码块"); } { System.out.println("父类构造代码块"); } public Father() { System.out.println("父类无参构造函数"); } public Father(String arg) { System.out.println("父类带参构造函数"); } } public class Son extends Father { static String s = "子类静态变量"; static { System.out.println("子类静态代码块"); } { System.out.println("子类构造代码块"); } public Son() { System.out.println("子类无参构造函数"); } public Son(String arg) { super(arg); System.out.println("子类带参构造函数"); } public static void main(String[] args) { System.out.println(Son.s); new Son(); new Son("arg"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值