【问题标题】:can an instance method be called from initializer block?可以从初始化程序块调用实例方法吗?
【发布时间】:2014-11-30 08:56:30
【问题描述】:

我一直在复习 Java,我读过“初始化程序块可以调用方法”

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

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

【问题讨论】:

  • 基本上是this。不要在构造函数或实例初始化器中调用非最终的、非私有的方法。

标签: java oop initializer


【解决方案1】:

instance initializer 块将作为任何构造函数执行的一部分被调用。所以你可以看到它好像被编译器复制到每个构造函数中一样。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多