繁体   English   中英

final static 和 static final 的区别

[英]Difference between final static and 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";

它们之间有什么区别或相同? 还是privatepublic不同?

完全没有区别。 根据8.3.1 - 类 - Java 语言规范的字段修饰符

如果两个或更多(不同的)字段修饰符出现在字段声明中,虽然不是必需的,但通常它们的出现顺序与上面在 FieldModifier 的产生式中显示的顺序一致。

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

@Annotation public protected private static final transient volatile

对于方法:

@Annotation public protected private abstract static final synchronized native strictfp

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

但是,大多数 Java 风格指南都建议/强制要求修饰符采用相同的特定顺序。 在这种情况下,它是public static final

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";

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

他们是一样的,

private final static String API_RTN_ERROR = "1";

private static final String API_RTN_ERROR= "1";

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

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

private final static <Type> <variable_name> = <value>;

因此建议使用:

private static final <Type> <variable_name> = <value>;

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

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

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

它们之间有什么区别或相同?

如果您正在谈论更改 static 和 final 的顺序,那么是的,它们是相同的。

私人或公共有什么不同?

不,您可以在私人和公共场合使用任何订单。 唯一的区别是私有变量不能直接在类外访问。

这只是人们为了保持编码风格一致而遵循的约定或惯例。 它提高了可读性。 所以写这个的首选方式是

private static final <Type> <variable_name> = <value>;

当然是一样的。 这仅取决于您的习惯和偏好:-)。 我也对成员和方法使用 public static final order

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM