【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 编程知识。

全部评论

相关推荐

嵌入式小辣鸡:包装好一点,校内的奖项可以不用写,校内项目经历最后两点写的太差了,详细讲一下内容,名字变一下。只需要写项目实现了什么,自己在其中做了什么就好,查看图片
点赞 评论 收藏
分享
渐好:软光栅真的写明白了吗,既然是软渲那技术栈不应该使用OpenGL,光追和bvh既不算什么高级渲染技术更不应该属于软渲的内容,git那个项目没啥用,建议把前两个项目重新组织一下语言,比如软渲染那个项目 冯着色和msaa、贴图这几项分开写,写的到位点,如果你还学过光追那就单独写出来,如果没把握考官问你答不上来就别写给自己找麻烦,在技术栈那一栏简单提一下自己学过就行,这样杂的放在一起不太严谨,个人愚见.
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务