关于字段的私有静态最终关键字的快速 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 问题的主要内容,如果未能解决你的问题,请参考以下文章

是否可以模拟私有静态最终字符串文字?

Android 私有字段命名准则可以吗?

Java 17 java.lang.reflect.InaccessibleObjectException:无法将字段设为私有最终 java.time.ZoneOffset

关于 Java 中私有静态嵌套类的合成访问器的 Eclipse 警告?

Joshua Bloch 在 Effective Java 中解释的枚举类型

Joshua Bloch 在 Effective Java 中解释的枚举类型