Java面试题:继承下类初始化顺序详解

需积分: 10 1 下载量 78 浏览量 更新于2024-09-23 收藏 573KB PDF 举报
"JAVA面试题解惑系列"是一本专注于Java面试技巧和笔试问题解答的专业书籍,作者臧圩人在2008年6月26日分享了关于类的初始化顺序这一经典面试题的相关知识。在Java编程中,类的初始化顺序是一个常见的概念,特别是在考察继承关系时的理解。 当谈到类的初始化,我们通常关注以下几个关键点: 1. **静态成员**: - 静态变量和静态初始化块的初始化优先级高于非静态成员。 - 在类加载时,静态变量会被初始化,无论是否被引用。 - 静态初始化块会在类初次加载时执行一次,即使没有实例化对象。 2. **实例成员**: - 变量和初始化块(实例初始化块):在创建对象时,变量会被初始化,而初始化块会紧跟在构造器之前执行。 - 构造器:最后,构造器会在创建对象时执行,负责初始化对象的实例变量。 在继承关系中,子类的初始化遵循以下顺序: - **父类静态成员**:首先初始化父类的静态变量和静态初始化块,因为这是在子类实例化之前完成的。 - **父类实例成员**:接着,父类的实例变量和初始化块执行。 - **子类静态成员**:如果子类有同名的静态成员,此时它们被初始化。 - **子类实例成员**:然后是子类的实例变量和初始化块。 - **子类构造器**:最后,调用子类的构造器初始化子类的对象。 针对给出的测试代码,当你创建`InitialOrderTest`类的实例时,会按照这个顺序打印出结果: 1. 父类的静态变量 `p_StaticField` 2. 父类的静态初始化块 3. 子类的变量 `field` 4. 子类的初始化块 5. 子类的构造器 通过这个例子,面试者可能会考察你对面向对象设计原则、继承的理解,以及在实际开发中的注意事项,比如理解类加载时机和初始化顺序对于代码行为的影响。记住,掌握这些基础知识可以帮助你在Java面试中自信地应对关于类初始化顺序的问题。