web-dev-qa-db-fra.com

Quick Java question sur les mots-clés finaux statiques privés pour les champs

Je déclare un champ:

private static final String filename = "filename.txt";

Tout d'abord, l'ordre de private static final matière? Sinon, existe-t-il une séquence ou une convention standard acceptée?

Deuxièmement, le filename dans mon application est fixe. Est-ce que le mieux était de stocker sa valeur?

32
Spencer

J'utilise Checkstyle avec Eclipse, ce qui entraîne un avertissement si la déclaration est dans un ordre différent de celui que vous avez spécifié, en citant la spécification de langage Java Java (JLS) ). Par exemple,

private final static String filename = "filename.txt";

résulte en

'static' modifier out of order with the JLS suggestions.

Ils ont cette page qui répertorie l'ordre qu'ils attendent, mais en suivant les liens sur cette page jusqu'au JLS je ne peux pas voir quoi que ce soit pour appuyer leur affirmation d'un ordre suggéré.

Cela dit, l'ordre qu'ils suggèrent semble correspondre à l'ordre dans la plupart du code que j'ai vu, il semble donc que la convention soit aussi bonne à adopter.

49
Hobo
  1. Non. Mais c'est la séquence que je vois habituellement utilisée.

  2. C'est un choix raisonnable, mais certains préféreraient un fichier de configuration, Propriétés ou un autre format de fichier (par exemple XML). De cette façon, vous pouvez modifier le nom de fichier sans recompiler.

23
Matthew Flaschen

Il est courant dans Java pour donner des constantes (static final values) un nom tout en majuscule, donc j'écrirais:

private static final String FILENAME = "filename.txt";

Voir aussi Conventions de code pour le Java . (Ce sont les conventions de code de Sun que la majorité des Java utilisent)).

14
Jesper

L'ordre le plus accepté de ces mots clés est private static final. Vous pouvez également vous souvenir de l'ordre de ces mots clés en utilisant le modèle PSF qui:

P => privé/public/protégé
S => statique/abstrait/...
F => final

5
frogatto
  1. L'ordre n'a pas d'importance, mais vous pouvez toujours jouer avec - il n'y a que 6 possibilités à tester.

  2. Je ne connais aucune convention, bien que je mette d'abord le modificateur de visibilité (public/privé/protégé) afin que vous puissiez le regarder et qu'il s'aligne.

  3. Si c'est résolu, vous pouvez le faire, mais je pense toujours que quelque chose est une constante pour découvrir plus tard (pendant les tests, par exemple) que je veux le transmettre. Un argument sur la ligne de commande ou un fichier de propriétés fonctionne pour ce cas , et représente un minimum d'efforts à mettre en place.

3
Phil

voir: http://docs.Oracle.com/javase/specs/jls/se5.0/html/classes.html#8.3.1

8.3.1 Modificateurs de champ

FieldModifiers:
FieldModifier
FieldModifiers FieldModifier

FieldModifier: l'un des
Annotation public protégé privé
Statique finale transitoire volatile

...

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 cohérent avec celui montré ci-dessus dans la production pour FieldModifier.

3
fishautumn

Pour compléter la réponse de Nice par @Hobo ci-dessus par un lien actuel

8.1.1. Modificateurs de classe

Une déclaration de classe peut inclure des modificateurs de classe.

     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 habituel, bien que non obligatoire, qu'ils apparaissent dans l'ordre cohérent avec celui indiqué ci-dessus dans la production pour ClassModifier.

3
serv-inc