关于私有静态常量字段的Java问题

39

我正在声明一个字段:

private static final String filename = "filename.txt";

首先,private static final 的顺序是否重要?如果不重要,那么是否有标准的顺序或公约?

其次,我的应用程序中的filename是固定的。这是存储其值的最佳方式吗?


注意:已经翻译完成,如需其他翻译任务,请提供新的输入。

根据JLS的规定,建议使用“static final”! - Gaurav
7个回答

53

我在Eclipse中使用Checkstyle,如果声明的顺序与你指定的不同,就会产生警告,引用Java语言规范(JLS)。例如:

private final static String filename = "filename.txt";

结果为

'static' modifier out of order with the JLS suggestions.

他们有这个页面列出了他们期望的顺序,尽管在该页面上跟随链接到JLS后,我没有看到任何支持他们建议顺序的东西。

话虽如此,他们建议的顺序似乎对应于我所见过的大多数代码的顺序,因此它似乎是采用任何一种惯例都可以接受的。


请参考以下内容了解有关文档和链接的详细信息,可查看此处 - serv-inc
是的,应该是private static final String。 - J.Luan

23
  1. 不是特定的顺序,但这通常是我看到的使用方式。

  2. 这是一个合理的选择,但有些人更喜欢使用配置文件,可以是Properties或其他文件格式(例如XML)。这样,您可以在不重新编译的情况下更改文件名。


1
你如何获取配置文件的文件名? :) - Tom Hawtin - tackline
@Tom,你说得很有道理。当然,真正的应用程序会有许多这样的常量,所有这些常量都可以在一个属性文件中。 - Matthew Flaschen

15

在Java中,给常量(static final值)命名为全大写是很常见的,所以我会这样写:

private static final String FILENAME = "filename.txt";

另请参阅Java编程语言的代码规范。(这是大多数Java程序员使用的Sun代码规范)。


那个链接已经失效了,没有任何有用的内容了。 :-( - Jim L.
@JimL修复了链接,虽然Oracle的页面上说这个文档“仅供存档目的”。 - Jesper

11
这些关键字的最常用排列顺序是 private static final。你可以使用PSF模式来记忆这些关键字的顺序:

P => private / public / protected
S => static / abstract / ...
F => final


PSF助记符是最好的!谢谢 - daparic

4

为了补充 @Hobo 的精彩回答(链接在此),我提供了一个当前链接

8.1.1. Class Modifiers

A class declaration may include class modifiers.

     ClassModifier:
         (one of) 
         Annotation public protected private 
         abstract static final strictfp

[...]

如果一个类声明中出现两个或多个(不同的)类修饰符,则通常,尽管不是必需的,它们应按照ClassModifier生产中所示的顺序出现。

4

请查看:http://docs.oracle.com/javase/specs/jls/se5.0/html/classes.html#8.3.1

8.3.1 字段修饰符

字段修饰符:
  字段修饰符
  字段修饰符 字段修饰符

字段修饰符:其中之一
  注释 public protected private
  static final transient volatile

...

如果一个字段声明中有两个或更多(不同的)字段修饰符,惯例上,它们应按照 FieldModifier 生产中所示顺序出现,但不是必需的。


3
  1. 顺序并不重要,但你可以随时尝试不同的顺序——只有6种可能需要测试。

  2. 我不知道是否有任何惯例,不过我首先放置可见性修饰符(public/private/protected),这样你就可以通过目测来对齐它。

  3. 如果它是固定的,那么你可以这么做,但我总是认为某些东西是常量,只有在稍后(例如在测试期间)才会发现我想要传递它。在命令行上或属性文件中的参数都适用于此情况,并且设置最少。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接