java - 可以从初始化 block 调用实例方法吗?

标签 java oop initializer

我一直在复习 Java,并且读到“初始化程序 block 可以调用方法”

它能在构造函数没有执行的情况下调用实例方法吗?这只是不受欢迎吗?

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

最佳答案

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

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

只要您调用的方法不能在子类中被覆盖,就完全没问题。 因此,如果您的方法是 privatefinal,则没有问题。

在这些情况下,最好有一种方法,而不是复制粘贴相同或相似的代码。

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

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

关于java - 可以从初始化 block 调用实例方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26210467/

相关文章:

java - 无需 session 的身份验证、授权和用户跟踪

java - 在 Tomcat 启动后启动监听器?

php - 在父类中使用 $this 仅显示子类中的父类属性

php - add_menu_page() 不适用于 wordpress 中的插件

matlab - 在Matlab中B类的属性中使用A类的对象?

python - 实际需要 global_variables_initializer() 时

Java 同步、线程安全、包装对象和竞争条件

java - WebElement.findElement 方法在 WebDriver 范围内查找元素

java - 调用没有名称的 Java 方法

swift - 初始化 UIContextualAction 类