Quel est l'ordre raisonnable des modificateurs Java (abstrait, final, public, statique, etc.)?

114

Qu'est-ce qu'un ordre raisonnable de modificateurs Java?

  • abstrait
  • final
  • originaire de
  • privé
  • protégé
  • Publique
  • statique
  • strictfp
  • synchronisé
  • transitoire
  • volatil

Mettre à jour

J'ai changé le libellé de recommandé à raisonnable afin de calmer les discussions, que l'ordonnance soit recommandée ou non.

Micha Wiedenmann
la source
Cela n'a aucune importance et vous ne devriez pas perdre trop de temps à vous inquiéter à ce sujet. Personnellement, je mets toujours le modificateur d'accès en premier, mais après cela, je ne pourrais même pas vous dire ce que je fais ensuite. Si vous voulez une référence, essayez ici , mais je ne suis pas sûr qu'elle soit même spécifiée ici.
Marquis de Lorne
9
Je me demande pourquoi cela devrait être une question "non constructive" (demandes fermées). Vous pouvez trouver la recommandation dans la spécification (voir ma réponse) et suivre cette recommandation améliorera la lisibilité du code. L'analyseur de code statique (comme SONAR) se plaindra si vous utilisez un ordre différent.
FrVaBe
J'ai jeté un autre regard sur les conventions Oracle / Sun Java Code . La question n'est même pas mentionnée, au seul endroit où vous devriez regarder et au seul endroit où vous vous attendez à ce qu'il apparaisse.
Marquis de Lorne
@EJB Les conventions de code datent de 1999 et ont fortement besoin d'être mises à jour. J'espère qu'ils incluront ce sujet s'ils touchent à nouveau à ces conventions car c'est en effet un bon endroit!
FrVaBe
1
Eclipse peut-il trier les modificateurs automatiquement? Ou au moins donner un avertissement s'ils ne sont pas triés?
Roland

Réponses:

126

L' ordre d'utilisation habituel des modificateurs est mentionné dans la spécification du langage Java (et non dans la spécification de la machine virtuelle Java), par exemple pour les modificateurs de classe, vous trouverez la définition suivante (extrait):

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

ClassModifier: one of
    Annotation public protected private
    abstract static final strictfp

[....]

Si deux ou plusieurs modificateurs de classe (distincts) apparaissent dans une déclaration de classe, il est courant, bien que non obligatoire, qu'ils apparaissent dans l'ordre cohérent avec celui indiqué ci-dessus dans la production de ClassModifier. (petit texte en bas du paragraphe!)

Vous trouverez cette phrase à plusieurs autres endroits où l'utilisation des modificateurs est spécifiée, par exemple ici pour les modificateurs de champ.

Mise à jour : j'ai remplacé «spécifié / recommandé» par «habituel» pour en faire une réponse acceptable. Prenez en compte si vous lisez les commentaires ;-) (merci @EJP que ceclair) - Néanmoins , je voudrais recommander d'utiliser l' usage commande.

Google recommande également d' utiliser l'ordre habituel mentionné dans les spécifications Java.

public / protected / private 
abstract 
static 
final 
transient 
volatile 
synchronized 
native 
strictfp

Mise à jour : Une nouvelleinitiative« Java Style Guidelines » est en place pour les projets de la communauté OpenJDK. Il a également une recommandation pour un ordre de modificateur et inclut également le nouveaumodificateur par défaut de Java 8.

public / private / protected
abstract
static
final
transient
volatile
**default**
synchronized
native
strictfp
FrVaBe
la source
1
La question était "Quel est l'ordre recommandé des modificateurs Java?" et cette question est répondue dans la spécification de langue (et comme la commande n'est pas requise, je dirais qu'elle est recommandée dans la spécification). La spécification JVM concerne le format de fichier de classe et non le code source Java. - En effet l'ordre n'a pas d'importance mais si vous suivez une recommandation votre code sera plus lisible par les autres. Je pense donc que c'est une question raisonnable pour laquelle une réponse précise peut être donnée. À propos - l'analyseur de code statique (par exemple SONAR) complètera le mauvais ordre.
FrVaBe
3
La phrase Si deux ou plusieurs modificateurs de classe (distincts) apparaissent dans une déclaration de classe, alors il est habituel, bien que non obligatoire, qu'ils apparaissent dans l'ordre cohérent avec celui indiqué ci-dessus dans la production de ClassModifier. FAIT PARTIE DE LA SPÉCIFICATION!
FrVaBe
1
Dans ce cas, je voulais crier mais je me suis déjà calmé - désolé pour ça ;-) - Je ne suis pas non plus natif - donc vous avez probablement raison sur l'interprétation de la langue. Ce que je voulais juste dire avec ma réponse, c'est qu'il y a un endroit très officiel où l'ordre des modificateurs dans le code source Java est géré - et j'ai eu la chance de trouver cela lorsque je me suis posé la même question. À mon humble avis, il n'y a pas de meilleur endroit pour trouver la réponse que dans la spécification du langage Java.
FrVaBe
1
@EJP Vous avez une forte opinion (~ pas de commande recommandée) sur ce sujet. Auriez-vous la gentillesse de fournir ceci comme réponse? Je suis curieux du vote.
FrVaBe
28

Il est raisonnable d'utiliser la commande conformément à la spécification de la machine virtuelle Java, tableau 4.4

  • Publique
  • protégé
  • privé
  • abstrait
  • défaut
  • statique
  • final
  • transitoire
  • volatil
  • synchronisé
  • originaire de
  • strictfp
Micha Wiedenmann
la source
8
+1 que vous voyez souvent: "public abstract", "private static final" etc. Certains IDE (par exemple NetBeans) ont même des raccourcis, par exemple "psf" ou "Psf"
Puce
1
Vous pouvez trouver l'ordre recommandé dans la spécification du langage Java (et non dans la spécification de la machine virtuelle Java!). Jetez un œil à ma réponse.
FrVaBe
1
@FrVaBe Vous ne trouvez rien de tel. Ne confondez pas les grammaires linguistiques avec les recommandations de style.
Marquis de Lorne
@Puce: certains IDE (par exemple IntelliJ IDEA) peuvent même trier correctement les modificateurs.
Mot
5

Basé sur leurs valeurs int.

Modificateur (Java Platform SE 8)

  • 1: public
  • 2: privé
  • 4: protégé
  • 8: statique
  • 16: finale
  • 32: synchronisé
  • 64: volatile
  • 128: transitoire
  • 256: natif
  • 512: interface
  • 1024: résumé
  • 2048: strictfp
Sero
la source
1
cette réponse n'inclut pas le mot-clé "par défaut"
Sero
1
Qu'est-ce que leurs valeurs int ont à voir avec cela?
Marquis of Lorne
0

J'utilise deux règles pour me souvenir de la séquence de modificateurs, mais n'inclut pas le strictfp, car il n'est jamais utilisé par moi. FYI.

  1. les natifs synchronisés sont les personnes les moins prioritaires.

  2. PPP AS FTV: PPP {noise sound} AS {watch} FTV {France TV}.

:)

Houcheng
la source