java - 什么时候应该将 final 用于方法参数和局部变量?

标签 java final

我找到了一些建议尽可能多地使用 final 的引用资料 ( for example ),我想知道这有多重要。这主要是在方法参数和局部变量的上下文中,而不是 final方法或类。对于常量,这是显而易见的。

一方面,编译器可以做一些优化,让程序员的意图更加清晰。另一方面,它增加了冗长,优化可能微不足道。

这是我应该努力记住的事情吗?

最佳答案

沉迷于:

  • Final 字段 - 将字段标记为 final 会强制它们在构造结束时设置,从而使该字段引用不可变。这允许安全地发布字段,并且可以避免在以后的读取中需要同步。 (请注意,对于对象引用,只有字段引用是不可变的 - 对象引用所指的内容仍然可以更改,这会影响不可变性。)
  • Final static fields - 虽然我现在在很多我以前使用 static final 字段的情况下使用枚举。

考虑但明智地使用:

  • 期末类(class) - 框架/API 设计是我考虑的唯一情况。
  • final方法 - 与最终类基本相同。如果您正在使用像 crazy 和标记为 final 这样的模板方法模式,您可能过于依赖继承而对委派的依赖不够。

忽略除非感觉肛门:

  • 方法参数和局部变量 - 我很少这样做主要是因为我很懒,而且我发现它会使代码困惑。我完全承认,标记我不打算修改的参数和局部变量是“正确的”。我希望它是默认值。但事实并非如此,我发现代码更难理解,因为 final 遍地都是。如果我在别人的代码中,我不会把它们拉出来,但如果我正在编写新代码,我不会把它们放进去。一个异常(exception)是你必须将某些东西标记为 final 以便你可以访问它来自匿名内部类。

  • 编辑:请注意一个用例,其中 final 局部变量实际上非常有用,如 @adam-gent 所述是在 if/else 分支中将值分配给 var 的时间。

关于java - 什么时候应该将 final 用于方法参数和局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23116670/

相关文章:

java - 更改包含特殊字符的字符串的排序顺序(例如 "_")

java - 如果我想稍后写入文件,可以将其设为最终文件吗?

C++ 最终类和切片习惯用法

java - 最终类中的静态函数是否隐式最终?

java - 为什么在向按钮添加 ActionListener 时突然需要将变量声明为 "final"?

java - 具有非最终成员且没有修改器方法的类的线程安全性

java - 在 SpringMVC 应用程序中初始化 MongoDB 存储库时出错

Java:为什么\t 转义字符与 toString() 的工作不一致?

java - 如何从 Eclipse 远程运行 Apache Spark?

Java获取网页源或者超时