可以从初始化程序块调用实例方法吗?

时间:2014-10-06 05:30:36

标签: java oop initializer

我一直在刷Java并且我已经读过"初始化程序块可以调用方法"

尽管构造函数没有执行,它还可以调用实例方法吗?这只是不满意吗?

编辑:我看到编译器允许它,所以问题是,它是安全的做法吗?

1 个答案:

答案 0 :(得分:2)

实例初始化程序块将作为执行任何构造函数的一部分进行调用。所以你可以看到它好像被编译器复制到每个构造函数中一样。

这使您的问题更简单:它与询问相同:“从构造函数调用实例方法是否安全?”

只要您调用的方法无法在子类中重写,这就完全没问题。 因此,如果您的方法为privatefinal,则没有问题。

在这些情况下,最好使用复制粘贴相同或类似代码的方法。

当子类可以覆盖一个方法时会出现问题,因为那时你会从构造函数中调用该方法,但是子类构造函数还没有执行。该方法将尝试访问尚未初始化的字段。

更多详情:What's wrong with overridable method calls in constructors?