【5 期】面试官:类的初始化顺序

静态变量和静态代码块优先于实例变量和普通代码块,静态变量和静态代码块的初始化顺序取决于它们在代码中的顺序。

存在继承的情况下,初始化顺序为

  • 父类(静态变量、静态代码块)
  • 子类(静态变量、静态代码块)
  • 父类(实例变量、普通代码块)
  • 父类(构造函数)
  • 子类(实例变量、普通代码块)
  • 子类(构造函数)

public class Parent {
	static {          
		System.out.println("Parent static block");
	}      
	{         
		System.out.println("Parent instance block");  
	}      
	public Parent() {       
		System.out.println("Parent constructor");   
	}
}
public class Child extends Parent {   
	static {          
		System.out.println("Child static block");   
	}   
	{       
		System.out.println("Child instance block");  
	}   
	public Child() {   
		System.out.println("Child constructor");  
	}
}

当创建 Child 对象时,先执行父类的静态成员变量和静态初始化块,再执行子类的静态成员变量和静态初始化块,接着执行父类的实例成员变量、实例初始化块和构造方法,最后执行子类的实例成员变量、实例初始化块和构造方法。

final 关键字的特殊处理: 如果成员变量被声明为 final,它必须在对象创建时进行初始化,可以通过直接赋值或者构造方法进行初始化。final 变量的值不能在后续的代码中修改。

public class MyClass {      
	final int finalVariable;   
	public MyClass() {        
		finalVariable = 30;       
		System.out.println("Final variable initialized");  
	}
}

final 变量的初始化通常在构造方法中进行,确保在对象创建时就有一个确定的值。

总体而言,Java 的初始化顺序是相对规范的,但在复杂的继承层次结构和包含多个初始化块的情况下,需要注意一些细节以确保正确的初始化顺序。

#24届软开秋招面试经验大赏##我的求职思考##23届找工作求助阵地#
Java 面试题精选 文章被收录于专栏

无论你是准备面试,提升职场竞争力,还是单纯热爱 Java 编程。本专栏将为你呈现一系列精选的 Java 面试题,涵盖从基础到高级的各个层面,帮助你全面提升 Java 编程知识。

全部评论

相关推荐

头像
04-26 15:05
已编辑
腾讯_后端开发
小红书 iOS社区技术 年薪52w+包三餐大小周
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务