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