final static和static final的区别

195

我找到了一段代码,其中它声明了类似这样的代码:

private final static String API_RTN_SUCCESS = "0";
private final static String API_RTN_ERROR = "1";

public static final String SHARED_PREFERENCE_CONFIG = "shared_preference_config";
public static final String STARTUP_SETTING_KEY = "startup_setting";

它们之间有什么区别,或者它们是相同的吗?或者在privatepublic情况下是否有所不同?


174
如果它们不同,那我就彻底放弃 Java。 - Alex Lockwood
8个回答

276

完全没有区别。根据Java语言规范8.3.1 - Classes - Field Modifiers

如果一个字段声明中出现两个或多个(不同的)字段修饰符,则通常情况下,尽管不是必需的,它们应按照FieldModifier中所示的顺序出现。

对于字段,该产生式按以下顺序列出了修饰符:

@Annotation public protected private static final transient volatile

对于方法:

@Annotation public protected private abstract static final synchronized native strictfp


13
参考链接中的顺序是 abstract static final - sfarbota

58

它们是相同的。修饰符的顺序并不重要。请注意,在 Java 中使用修饰符的所有上下文中都适用相同的规则。

然而,大多数 Java 风格指南建议/强制使用相同的修饰符顺序。在这种情况下,它是 public static final


20
private static final String API_RTN_ERROR= "1";
private final static String API_RTN_ERROR= "1";
static private final String API_RTN_ERROR= "1";
static final private String API_RTN_ERROR= "1";
final static private String API_RTN_ERROR= "1";
final private static String API_RTN_ERROR= "1";

即使所有的元素都相同,前三个元素的位置也可以互换。


2
它们确实都是可以互换的,但会让其他阅读代码的人非常生气。最好坚持一个顺序。 - runzhi xiao

11

逻辑上没有区别,技术上也没有影响。

唯一的问题是如果你按照这个顺序使用,SonarQube会报告代码异味。

private final static <Type> <variable_name> = <value>;
因此,建议使用:
private static final <Type> <variable_name> = <value>;

Java 语言规范建议按照以下顺序列出修饰符:

  1. 注解
  2. public
  3. protected
  4. private
  5. abstract
  6. static
  7. final
  8. transient
  9. volatile
  10. synchronized
  11. native
  12. strictfp

请注意,遵循此约定不会对技术产生影响,但会降低代码的可读性,因为大多数开发人员习惯于标准顺序。


9
它们是相同的。
private final static String API_RTN_ERROR = "1";

private static final String API_RTN_ERROR= "1";

4
如果你在谈论改变static和final的顺序,那么它们是相同的。无论是private还是public,你都可以使用任何顺序。唯一的区别是private变量不能直接在类外部访问。

2
这只是人们遵循的一种约定或实践,用于保持编码风格的一致性。它可以提高可读性。因此,写作的首选方式是:
private static final <Type> <variable_name> = <value>;

0

当然是一样的,这只取决于你的习惯和偏好 :-). 我也使用公共静态常量顺序来定义成员和方法


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