我一直在刷Java并且我已经读过"初始化程序块可以调用方法"
尽管构造函数没有执行,它还可以调用实例方法吗?这只是不满意吗?
编辑:我看到编译器允许它,所以问题是,它是好,安全的做法吗?
答案 0 :(得分:2)
实例初始化程序块将作为执行任何构造函数的一部分进行调用。所以你可以看到它好像被编译器复制到每个构造函数中一样。
这使您的问题更简单:它与询问相同:“从构造函数调用实例方法是否安全?”
只要您调用的方法无法在子类中重写,这就完全没问题。
因此,如果您的方法为private
或final
,则没有问题。
在这些情况下,最好使用复制粘贴相同或类似代码的方法。
当子类可以覆盖一个方法时会出现问题,因为那时你会从构造函数中调用该方法,但是子类构造函数还没有执行。该方法将尝试访问尚未初始化的字段。
更多详情:What's wrong with overridable method calls in constructors?