关于字段的私有静态最终关键字的快速 Java 问题
Posted
技术标签:
【中文标题】关于字段的私有静态最终关键字的快速 Java 问题【英文标题】:Quick Java question about private static final keywords for fields 【发布时间】:2011-02-19 09:37:30 【问题描述】:我正在声明一个字段:
private static final String filename = "filename.txt";
首先,private static final
的顺序重要吗?如果没有,是否有标准的公认顺序或约定?
其次,我的应用程序中的filename
是固定的。这是最好的存储价值吗?
【问题讨论】:
根据 JLS 首选静态 final! 【参考方案1】:我在 Eclipse 中使用Checkstyle,如果声明的顺序与您指定的顺序不同,则会发出警告,并引用 Java 语言规范 (JLS)。例如,
private final static String filename = "filename.txt";
结果
'static' modifier out of order with the JLS suggestions.
他们有this page,其中列出了他们期望的顺序,尽管通过该页面上的链接到JLS,我看不到任何支持他们对建议顺序的断言。
话虽如此,他们建议的顺序似乎与我见过的大多数代码中的顺序相对应,所以它似乎是一个很好的约定。
【讨论】:
请参阅 below 获取文档及其链接。 是的,应该是私有静态最终字符串【参考方案2】:没有。但这是我通常看到使用的顺序。
这是一个合理的选择,但有些人更喜欢配置文件,Properties 或其他文件格式(例如 XML)。这样,您无需重新编译即可更改文件名。
【讨论】:
如何获取配置文件的文件名? :) @Tom,这是一个有效的观点。当然,真正的应用程序会有很多这样的常量,所有这些常量都可以放在一个属性文件中。【参考方案3】:在 Java 中给常量(static final
值)一个全大写的名称是很常见的,所以我会这样写:
private static final String FILENAME = "filename.txt";
另见Code Conventions for the Java Programming Language。 (这些是大多数 Java 程序员使用的 Sun 的代码约定)。
【讨论】:
该链接不再有用。 :-( @JimL。修复了链接,尽管 Oracle 的页面说该文档“仅用于存档目的”。【参考方案4】:这些关键字的最常用顺序是private static final
。您还可以使用 PSF 模式记住这些关键字的顺序:
P => 私有/公共/受保护S => 静态/抽象/ ...F = > 最终
【讨论】:
PSF
助记符是最好的!谢谢【参考方案5】:
顺序无关紧要,但您可以随时使用它 - 只有 6 种可能性可供测试。
我不知道任何约定,但我将可见性修饰符放在首位(公共/私有/受保护),这样您就可以看到它并排成一行。
如果它是固定的,那么你可以这样做,但我总是认为某些东西是一个常数,只有在以后(例如在测试期间)才发现我想要传递它。命令行上的参数或properties 文件适用于这种情况,并且设置起来非常简单。
【讨论】:
【参考方案6】:见:http://docs.oracle.com/javase/specs/jls/se5.0/html/classes.html#8.3.1
8.3.1 字段修饰符
字段修饰符: 字段修改器 字段修饰符字段修饰符
FieldModifier:其中之一 注释公共保护私有 静态最终瞬态易失
...
如果两个或多个(不同的)字段修饰符出现在字段声明中,习惯尽管不是必需的,但它们的出现顺序与上面为 FieldModifier 的产生式显示的顺序一致。
【讨论】:
【参考方案7】:通过current link 完成好答案by @Hobo above
8.1.1。类修饰符
类声明可以包含类修饰符。
ClassModifier: (one of) Annotation public protected private abstract static final strictfp
[...]
如果两个或多个(不同的)类修饰符出现在一个类中 声明,那么尽管不是必需的,但习惯上是他们 出现的顺序与上面在生产中显示的顺序一致 对于 ClassModifier。
【讨论】:
以上是关于关于字段的私有静态最终关键字的快速 Java 问题的主要内容,如果未能解决你的问题,请参考以下文章
Java 17 java.lang.reflect.InaccessibleObjectException:无法将字段设为私有最终 java.time.ZoneOffset
关于 Java 中私有静态嵌套类的合成访问器的 Eclipse 警告?