【问题标题】:Difference between final static and static finalfinal static 和 static final 的区别
【发布时间】:2012-06-28 11:49:03
【问题描述】:

我找到了一个代码,它声明了类似的代码

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 有什么不同?

【问题讨论】:

  • 如果不一样,那我就彻底放弃java了。

标签: java static final


【解决方案1】:

完全没有区别。根据 8.3.1 - Classes - Field Modifiers of the Java Language Specification,

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

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

@Annotationpublicprotectedprivatestaticfinaltransientvolatile

对于方法:

@Annotationpublicprotectedprivateabstractstaticfinalsynchronizednativestrictfp

【讨论】:

  • 供参考,来自链接的顺序是abstract static final
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:
    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";
    

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

    【讨论】:

    • 确实都是可以互换的,但会让其他读码者非常生气。最好坚持一个订单
    【解决方案4】:

    它们是一样的,

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

    【讨论】:

      【解决方案5】:

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

      如果您在谈论改变静态和最终的顺序,那么是的,它们是相同的。

      私人和公共有区别吗?

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

      【讨论】:

        【解决方案6】:

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

        唯一的问题是,如果您按此顺序使用,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. strictfp

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

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

            当然是一样的。这仅取决于您的习惯和偏好:-)。 我也对成员和方法使用公共静态最终顺序

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-10-28
              • 1970-01-01
              • 2015-05-11
              • 2019-02-20
              • 1970-01-01
              • 2016-12-02
              • 1970-01-01
              相关资源
              最近更新 更多