`
冇心人
  • 浏览: 55296 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java常见笔试面试题目解析(四): Java中静态代码块及对象的初始化顺序

阅读更多
class Parent{  
    static String name = "hello";  
    static {  
        System.out.println("parent static block");  
    }  
    public Parent(){  
        System.out.println("parent constructor");  
    }  
}  
  
class Child extends Parent{  
    static String childName = "hello";  
    static {  
        System.out.println("child static block");  
    }  
    public Child(){  
        System.out.println("child constructor");  
    }  
}  
  
public class StaticIniBlockOrderTest {  
  
    public static void main(String[] args) {  
        new Child();//语句(*)  
    }  
}  
class Parent{
 static String name = "hello";
 static {
  System.out.println("parent static block");
 }
 public Parent(){
  System.out.println("parent constructor");
 }
}

class Child extends Parent{
 static String childName = "hello";
 static {
  System.out.println("child static block");
 }
 public Child(){
  System.out.println("child constructor");
 }
}

public class StaticIniBlockOrderTest {

 public static void main(String[] args) {
        new Child();//语句(*)
 }
}
问题:当执行完语句(*)时,打印结果是什么顺序?为什么?
解答:当执行完语句(*)时,结果是这样一个顺序:parent static block,child static block,parent constructor,child constructor。
分析:当执行new Child()时,它首先去看父类里面有没有静态代码块,如果有,它先去执行父类里面静态代码块里面的内容,当父类的静态代码块里面的内容执行完毕之后,接着去执行子类(自己这个类)里面的静态代码块,当子类的静态代码块执行完毕之后,它接着又去执行父类的构造方法,父类的构造方法执行完毕之后,它接着再去执行子类的构造方法,这个就是一个对象的初始话化顺序。

总结:对象的初始化顺序是首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去执行父类的构造方法,父类的构造方法执行完毕之后,再去执行子类的构造方法。总之一句话,静态的块内容先执行。

注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。
分享到:
评论

相关推荐

    java程序员经典笔试面试题汇总

    4. **初始化顺序**:根据上述分析,可以得出以下初始化顺序: - 静态变量 `a` 的初始化(输出 `"sss"`) - 执行 `Test` 类的静态代码块(输出 `"***"`) - 调用非静态方法 `test()`(输出 `"###"`) **扩展思考*...

    Java笔试面试题及答案解析(一)

    ### Java笔试面试题及答案解析知识点 #### 1. 整型溢出与浮点数特殊值 **问题1:** 存在使`i+1 的数吗? **答案:** 存在。 **解析:** 如果变量`i`为`int`类型,那么当`i`取`int`所能表示的最大整数值时(即`...

    Java面试笔试机试题大汇总

    - 类中的静态变量和静态代码块会首先被加载和执行。 - 接着是非静态变量的初始化。 - 最后是构造函数的调用。 2. **Java内存模型** 文档提到了“JavaôŻJAVAܣһenstein µĸҪ棺”这一部分可能是指Java的...

    Java面试题以及答案整理.pdf

    初始化顺序为:静态初始化块 -> 构造器 -> 实例初始化块。 12. **内部类的实现方式** 内部类分为:成员内部类、局部内部类、匿名内部类和静态内部类。 13. **Java实现排序和序列化** 可以使用Java内置的`...

    java面试笔试题整合

    Java面试和笔试题是评估求职者技能的重要工具,下面是对几个关键知识点的详细解析: 1. **final, finally, finalize的区别** - **final**:final关键字用于声明类、方法或变量不可变。对于类,它禁止继承;对于...

    java笔试题集(java基础,JAVAEE,JAVASE,21种设计模式)

    - 首先,在静态初始化块中定义了一个局部变量 `x`,但这个 `x` 并不会影响类级的静态变量 `x`。 - 在 `main` 方法中,首先对静态变量 `x` 进行自减操作,此时 `x` 的值为 `-1`。 - 接着调用 `myMethod()` 方法,此时...

    java面试笔试题大汇总

    Java面试和笔试题涵盖了许多核心概念,以下是针对这些题目中涉及的Java知识点的详细解析: 1. **final, finally, finalize的区别**: - `final` 关键字用于声明不可变对象、变量或方法,确保其值在初始化后无法...

    100家大公司java笔试题汇总

    以上对100家大公司的Java笔试题进行了详细的解析,涵盖了Java语言基础、面向对象特性、异常处理、数据库连接、Web开发等多个方面。通过对这些知识点的学习和掌握,可以帮助开发者更好地应对技术挑战,提升编程技能。

    笔试型_J2EE初级技术面试题目

    ### 笔试型_J2EE初级技术面试题目详解 #### 1. Classpath与path的使用 Classpath和path是Java开发中常见的环境变量,它们分别用于指定Java编译器和运行时查找类库和可执行文件的路径。Classpath主要用于指向.class...

    java笔试题

    这段代码涉及静态变量和静态初始化块。在执行`main`方法时,静态变量`x`先被初始化为5,然后在`myMethod`中,`x--`和`x++`的顺序会影响结果。由于预增量操作符`++`优先级高于后增量操作符,所以`x++`先执行,`y`被...

    01-JAVA岗位笔试题(A卷)附答案

    - **初始化**:执行类构造器()方法,初始化静态变量和执行静态代码块。 #### 二十二、MyBatis底层实现原理 MyBatis是一个优秀的持久层框架,其核心组件和工作原理包括: - **SqlSessionFactory**:创建SqlSession的...

Global site tag (gtag.js) - Google Analytics