对象初始化

  • Question:
    • 为什么可以在实例(非static)方法体内直接调用本类实例方法,而不用通过new一个对象来调用?
  • Answer:
    • 在类被装载、连接和初始化,这个类就随时都可能使用了。对象实例化和初始化是就是对象生命的起始阶段的活动,在这里我们主要讨论对象的初始化工作的相关特点。
    • Java 编译器在编译每个类时都会为该类至少生成一个实例初始化方法–即init方法。此方法与源代码中的每个构造方法相对应,如果类没有明确地声明任何构造方法,编译器则为该类生成一个默认的无参构造方法,这个默认的构造器仅仅调用父类的无参构造器,与此同时也会生成一个与默认构造方法对应的init方法.
    • 通常来说,init方法内包括的代码内容大概为:调用另一个 init 方法;对实例变量初始化;与其对应的构造方法内的代码。
    • 如果构造方法是明确地从调用同一个类中的另一个构造方法开始,那它对应的init方法体内包括的内容为:一个对本类的init方法的调用;对应用构造方法内的所有字节码。
    • 如果构造方法不是通过调用自身类的其它构造方法开始,并且该对象不是 Object 对象,那init法内则包括的内容为:一个对父类init方法的调用;对实例变量初始化方法的字节码;最后是对应构造子的方法体字节码。
    • 如果这个类是 Object,那么它的init方法则不包括对父类 init方法的调用。

init方法

猜你喜欢

转载自blog.csdn.net/eahau/article/details/81146168