静态代码块,非静态代码块,无参构造,有参构造,这些代码片段分别在什么时候加载执行?
package com.java4all.test10;
public class Father {
static {
System.out.println("father的静态代码块");
}
{
System.out.println("father的非静态代码块");
}
public Father() {
System.out.println("father的构造方法");
}
}
package com.java4all.test10;
public class Son extends Father{
static {
System.out.println("son的静态代码块");
}
{
System.out.println("son的非静态代码块");
}
public Son() {
System.out.println("son的构造方法");
}
}
package com.java4all.test10;
public class Test1 {
public static void main(String[] args){
System.out.println("创建son对象前");
Son son = new Son();
System.out.println("创建son对象后");
}
}
结果:
创建son对象前
father的静态代码块
son的静态代码块
father的非静态代码块
father的构造方法
son的非静态代码块
son的构造方法
创建son对象后
父类
public class Father {
static {
System.out.println("father的静态代码块");
}
{
System.out.println("father的非静态代码块");
}
//public Father() {
// System.out.println("father的构造方法");
//}
public Father(Integer a) {
System.out.println("father的带参构造方法");
}
}
子类
public class Son extends Father{
static {
System.out.println("son的静态代码块");
}
{
System.out.println("son的非静态代码块");
}
public Son() {
//父类没有无参,只有有参,需要显示调用父类的有参构造
super(5);
System.out.println("son的构造方法");
}
public Son(Integer a) {
//父类没有无参,只有有参,需要显示调用父类的有参构造
super(5);
System.out.println("son的带参构造方法");
}
}
结果:
创建son对象前
father的静态代码块
son的静态代码块
father的非静态代码块
father的带参构造方法
son的非静态代码块
son的构造方法
创建son对象后
总的来说,按照如下的大顺序调用: 父类静态代码块 子类静态代码块
父类非静态代码块 父类构造函数
子类非静态代码块 子类构造函数
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有