Difference between final static and static final

JavaStaticFinal

Java Problem Overview


I found a code where it declared code like

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

What is the difference between them or are they same? Or does it differ for private or public?

Java Solutions


Solution 1 - Java

No difference at all. According to 8.3.1 - Classes - Field Modifiers of the Java Language Specification,

> If two or more (distinct) field modifiers appear in a field declaration, it is customary, though not required, that they appear in the order consistent with that shown above in the production for FieldModifier.

For fields, the said production lists the modifiers in this order:

> @Annotation public protected private static final transient volatile

And for methods:

> @Annotation public protected private abstract static final synchronized native strictfp

Solution 2 - Java

They are the same. The order of modifiers is not significant. And note that the same rule applies in all contexts where modifiers are used in Java.

However, most Java style guides recommend/mandate the same specific order for the modifiers. In this case, it is public static final.

Solution 3 - Java

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

even all above are same the position of first three is intercangeable.

Solution 4 - Java

They are same,

private final static String API_RTN_ERROR = "1";

private static final String API_RTN_ERROR= "1";

Solution 5 - Java

> What is the difference between them or are they same?

If you are talking about changing order of static and final then yes they are same.

> does it differ for private or public?

No, you can use any order in private and public. Just difference is private variables will not be accessible outside of class directly.

Solution 6 - Java

No difference logically and no technical impact.

only issue is that sonarqube will report Code Smell if you use in this order

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

Hence recommendation is to use :

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

The Java Language Specification recommends listing modifiers in the following order:

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

Note following this convention has no technical impact, but will reduce the code's readability because most developers are used to the standard order.

Solution 7 - Java

This is just a convention or a practice people follow to keep coding style consistent. It improves the readability. so preferred way of writing this is

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

Solution 8 - Java

it's the same, of course. it only depends on your habits and preference :-). I use public static final order for members and methods too

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMBMJView Question on Stackoverflow
Solution 1 - JavaGergely SzilagyiView Answer on Stackoverflow
Solution 2 - JavaStephen CView Answer on Stackoverflow
Solution 3 - JavaRTAView Answer on Stackoverflow
Solution 4 - JavajmjView Answer on Stackoverflow
Solution 5 - JavaHarry JoyView Answer on Stackoverflow
Solution 6 - JavaRRKView Answer on Stackoverflow
Solution 7 - JavaVishal AkkalkoteView Answer on Stackoverflow
Solution 8 - JavapietroSVView Answer on Stackoverflow