【问题标题】:Make private methods final?使私有方法最终?
【发布时间】:2009-12-31 08:01:20
【问题描述】:

将私有方法设为最终方法是否有益?这会提高性能吗?

我认为“private final”没有多大意义,因为私有方法不能被覆盖。所以方法查找应该和使用final时一样高效。

如果可能的话,将私有辅助方法设为静态会更好吗?

最好用什么?

  private Result doSomething()
  private final Result doSomething()
  private static Result doSomething()
  private static final Result doSomething()

【问题讨论】:

  • 私有方法不被继承,因此不能被覆盖。子类可以包含与超类中的最终私有方法同名的方法。因此,将方法声明为私有 final 是没有意义的。

标签: java final


【解决方案1】:

final 添加到方法不会提高 Sun HotSpot 的性能。在可以添加final 的地方,HotSpot 会注意到该方法永远不会被覆盖,因此对其进行相同的处理。

在 Java 中,private 方法是非虚拟的。您不能覆盖它们,即使使用子类可以访问它们的嵌套类也是如此。例如,调用私有方法的方法与用于非私有方法的方法不同。将final 添加到私有方法中没有任何问题。

与以往一样,这类微优化不值得花时间。

【讨论】:

  • ... 99.9% 的时间。你会知道微优化什么时候有意义。更重要的是,private final 方法声明在语义上没有意义,所以它只会在没有的地方增加混乱;只需private 就足够了。
【解决方案2】:

private static Result doSomething(),如果此方法未使用任何实例变量。 在任何情况下,将它们设为 final 是没有意义的,因为访问器是私有的。

【讨论】:

  • 内部类怎么样?
【解决方案3】:

没有。它不会。私有方法不被继承。所以让他们最终成为一个有争议的问题。另请注意,您不应将方法设为最终的性能。 JVM 比这更聪明。这种优化没有多大用处。您应该根据语义和设计使事情成为最终的、私有的、私有的、受保护的、私有的等。

【讨论】:

    【解决方案4】:

    将私有方法标记为 final 不会改变任何内容,但可能会使查看代码的初级开发人员感到困惑。保持简单。

    【讨论】:

      【解决方案5】:

      IBM Developer 工作:Java theory and practice: Is that your final answer? 文章是一篇关于在 Java 中使用 final 关键字的老文章:

      【讨论】:

      • 我希望 C# 有一个 final 关键字。相反,它有 const、只读和密封。呵呵。
      【解决方案6】:

      通过将方法设为final,我们不能覆盖该方法。由于私有方法不能在类外访问。没有使方法最终和私有的感觉。它可能会影响性能。

      【讨论】:

      • 它不会影响性能,编译器比这更聪明
      猜你喜欢
      • 2018-03-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2014-06-03
      • 2016-01-22
      • 2014-05-26
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多