我一直在复习 Java,并且读到“初始化程序 block 可以调用方法”
它能在构造函数没有执行的情况下调用实例方法吗?这只是不受欢迎吗?
编辑:我看到编译器允许这样做,所以问题是,这是一种好、安全的做法吗?
最佳答案
实例初始化 block 将作为任何构造函数执行的一部分被调用。所以你可以看到它好像被编译器复制到每个构造函数中。
这使您的问题更简单:它与询问“从构造函数调用实例方法是否安全?”的问题相同
只要您调用的方法不能在子类中被覆盖,就完全没问题。
因此,如果您的方法是 private
或 final
,则没有问题。
在这些情况下,最好有一种方法,而不是复制粘贴相同或相似的代码。
当子类可以重写一个方法时就会出现问题,因为那时您将从构造函数中调用该方法,但子类构造函数尚未执行。该方法将尝试访问尚未初始化的字段。
更多详情:What's wrong with overridable method calls in constructors?
关于java - 可以从初始化 block 调用实例方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26210467/