最终静态和静态最终之间的差异

MBM*_*BMJ 141 java static final

我找到了一个声明代码的代码

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";
Run Code Online (Sandbox Code Playgroud)

它们之间有什么区别或它们是一样的?或者它的不同privatepublic

Ger*_*gyi 210

没有任何区别.根据 8.3.1 - 类 - Java语言规范的字段修饰符,

如果两个或多个(不同的)字段修饰符出现在字段声明中,则通常(尽管不是必需的)它们按照与上面在FieldModifier的制作中显示的顺序一致的顺序出现.

对于字段,所述生产按此顺序列出修饰符:

@Annotation public protected private static final transient volatile

对于方法:

@Annotation public protected private abstract static final synchronized native strictfp

  • 作为参考,链接的顺序是`abstract static final`. (8认同)

Ste*_*n C 39

他们是一样的.修饰符的顺序并不重要.请注意,相同的规则适用于Java中使用修饰符的所有上下文.

但是,大多数Java样式指南建议/强制使用修饰符的相同特定顺序.在这种情况下,它是public static final.


RTA*_*RTA 18

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";
Run Code Online (Sandbox Code Playgroud)

即使以上所有都是相同的,前三个的位置是可互换的.

  • 确实所有这些都可以互换,但会让其他代码阅读器非常生气。最好坚持一个订单 (2认同)

小智 11

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

唯一的问题是,如果您按此顺序使用,sonarqube 会报告 Code Smell

private final static <Type> <variable_name> = <value>;
Run Code Online (Sandbox Code Playgroud)

因此建议使用:

private static final <Type> <variable_name> = <value>;
Run Code Online (Sandbox Code Playgroud)

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

  1. 注释
  2. 民众
  3. 受保护的
  4. 私人的
  5. 抽象的
  6. 静止的
  7. 最终的
  8. 短暂的
  9. 易挥发的
  10. 同步的
  11. 本国的
  12. 严格fp

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


Jig*_*shi 8

他们是一样的,

private final static String API_RTN_ERROR = "1";

private static final String API_RTN_ERROR= "1";
Run Code Online (Sandbox Code Playgroud)