深入探讨Java继承中的构造器与变量初始化顺序
Java继承机制中,构造器和变量的初始化顺序并非总是直观易懂。虽然《On Java》提到变量会在任何方法(包括构造器)调用前初始化,但JVM的实际执行顺序可能出乎意料。
让我们通过一个简化示例来分析:
class Shape { Shape() { System.out.println("Shape"); } } class Line extends Shape { Line() { super(); System.out.println("Line"); } } public class CADSystem extends Shape { private Line li = new Line(); // 关键点:成员变量初始化 public CADSystem() { super(); System.out.println("CADSystem"); } }
运行结果:
立即学习“Java免费学习笔记(深入)”;
Shape Shape Line CADSystem
很多人会误以为执行顺序是:
然而,JVM的实际执行顺序遵循以下规则:
因此,理解的关键在于:父类构造器的调用发生在子类成员变量初始化之前,而super()的调用发生在子类构造器体之前。 这决定了最终的执行顺序。 成员变量的初始化并非简单的在构造器之前,而是与父类构造器的调用顺序紧密相连。
以上就是Java继承中,构造器和变量初始化的执行顺序究竟是怎样的?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号