【问题标题】:When declaring a class as final, is each method automatically declared final as well?将类声明为 final 时,每个方法是否也会自动声明为 final?
【发布时间】:2013-02-28 19:39:03
【问题描述】:

我知道,如果一个类被声明为 final,那么它的方法实际上就无法被覆盖,因为首先需要一个子类来覆盖它们。话虽如此,我想知道这是否仍然与在该类的每个方法前面输入“final”完全一样。

我问这个的原因是让方法最终可能会导致它们中的一些运行得更快;我想知道的是,这种加速优势是否自动平等地存在于已声明为 final 的类中的所有方法,或者您是否必须明确地将方法设为 final 才能获得这种优势。

谢谢!

【问题讨论】:

    标签: actionscript-3 apache-flex optimization final


    【解决方案1】:

    你不能扩展最终类,所以你不能覆盖它的方法。谈论方法是否是最终的真的没有意义。

    最终方法的理论速度提高是因为编译器可以在有意义的情况下内联函数。很难准确预测编译器何时会这样做,而且大多数情况下您不会注意到差异。它没有记录(或据我所知),但我想启发式将基于函数的简短性以及是否在循环中使用。在这种情况下,函数包装器的开销与它所包含的代码相比会变得很大。

    注意:使用 arguments 对象的函数不能进行内联。

    实际上,您几乎不会注意到速度差异。但是,如果您可以构建一个可以测量的案例,您可以通过将类设为 final 而不是方法来轻松进行测试。

    编辑: FWIW,我试过这个,但无法衡量在方法上使用 final 与不使用它之间的区别。在课堂上使用final 也是一样的。 This SO answer 得出同样的结论。

    【讨论】:

    • 您的意思是说,为了任何潜在的速度优化,使类最终会自动使所有方法成为最终方法?
    • 您好像是这么说的,但我只是想确定一下。
    • 查看我上次的编辑。看起来final 在这两种情况下都没有任何性能影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2014-03-09
    • 2020-03-24
    • 2022-08-04
    • 2019-07-04
    • 1970-01-01
    相关资源
    最近更新 更多