Différence entre final statique et statique final

151

J'ai trouvé un code où il déclarait du code comme

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

Quelle est la différence entre eux ou sont-ils identiques? Ou est-ce différent pour privateou public?

MBMJ
la source
149
S'ils sont différents, alors j'abandonne complètement java.
Alex Lockwood

Réponses:

226

Aucune différence. Selon 8.3.1 - Classes - Modificateurs de champ de la spécification du langage Java ,

Si deux ou plusieurs modificateurs de champ (distincts) apparaissent dans une déclaration de champ, il est habituel, bien que non obligatoire, qu'ils apparaissent dans l'ordre correspondant à celui indiqué ci-dessus dans la production de FieldModifier.

Pour les champs, ladite production répertorie les modificateurs dans cet ordre:

@Annotation public protected private static final transient volatile

Et pour les méthodes:

@Annotation public protected private abstract static final synchronized native strictfp

Gergely Szilagyi
la source
9
Pour référence, la commande à partir du lien est abstract static final.
sfarbota
42

Ce sont les mêmes. L'ordre des modificateurs n'est pas significatif. Et notez que la même règle s'applique dans tous les contextes où des modificateurs sont utilisés en Java.

Cependant, la plupart des guides de style Java recommandent / imposent le même ordre spécifique pour les modificateurs. Dans ce cas, c'est le cas public static final.

Stephen C
la source
19
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";

même tous les éléments ci-dessus sont identiques, la position des trois premiers est interchangeable.

RTA
la source
8

Ils sont pareils,

private final static String API_RTN_ERROR = "1";

private static final String API_RTN_ERROR= "1";
Jigar Joshi
la source
4

Quelle est la différence entre eux ou sont-ils identiques?

Si vous parlez de changer l'ordre statique et définitif, alors oui, ils sont identiques.

est-ce différent pour privé ou public?

Non, vous pouvez utiliser n'importe quel ordre en privé et en public. La seule différence est que les variables privées ne seront pas accessibles directement en dehors de la classe.

Harry Joy
la source
1

Ceci est juste une convention ou une pratique que les gens suivent pour garder le style de codage cohérent. Cela améliore la lisibilité. la manière préférée d'écrire ceci est

private static final <Type> <variable_name> = <value>;
Vishal Akkalkote
la source
0

c'est la même chose, bien sûr. cela ne dépend que de vos habitudes et de vos préférences :-). J'utilise également l'ordre final statique public pour les membres et les méthodes

pietroSV
la source