2012-04-24 15 views
34

Ogni volta che scrivo un metodo in Java con più parole chiave dello public void, ogni volta che lo scrivo in un altro modo. A volte "static public void" a volte "public static void" ecc.Modificatore Ordine parole chiave in Java

Qual è l'ordine migliore (best practice) per queste parole chiave?

[abstract/static] [final] [synchronized] [public/private/protected] [result_type] ???

+0

Suona come una mia domanda che ha ottenuto avviato a http: //programmers.stackexchange.com/... Ma personalmente Io uso '[pubblico/privato/protetto] [finale/astratto/statico] [sincronizzato] [tipo] func()' ... –

risposta

2

L'ordine migliore è quello utilizzato dal resto del codice.

+4

Sì, ma non si può negare che 'public static final' è più comune di' statico finale pubblico'. Ci sono alcune convenzioni non scritte. –

+0

In realtà, ci sono alcune convenzioni piuttosto chiare in Javaland, ad esempio i metodi di denominazione con stile infixCaps. Vale la pena imparare e seguirli. – ewernli

1

Ti piace questa:

public static final synchronized void calculate()

+0

'public static final synchronized void calculate()' ;-) – Betlista

+0

@Betlista - Grazie, fatto :) –

44

In teoria non importa se dici pubblico finale o finale public static statico, ma se si segue la solita convenzione, altre persone saranno in grado di leggere il codice più facilmente. Ecco l'ordine preferito:

[pubblico | protetto | privato]

statico

astratto

sincronizzato

[transitoria | volatili]

finale

nativo

strictf

[int | lungo | Stringa | classe | enum | Interfaccia ecc]

+1

http://checkstyle.sourceforge.net/config_modifier.html –

+1

@YoushaAleayoub Sulle sezioni JLS fornite, Non dice nulla sulle restrizioni di ordine, qualcosa del tipo 'È un errore in fase di compilazione, se non si segue l'ordine sopra. :) –

+4

Penso che l'ordine per static e abstract sia scambiato secondo http://docs.oracle.com/javase/specs /jls/se7/html/jls-8.html#jls-8.4.3. Andando a modificarlo .. –

0

Questa è la mia scelta personale

public static final void method() { } 
public void method() { } 
public abstract void method() { } 

questo sembra, in linea anche con la documentazione java

3

Il "migliore" sarebbe quella di seguire il Java Coding Style Guide, che gli stati in 6.2 (dichiarazione di metodo):

public static final synchronized long methodName() 
    throws ArithmeticException, InterruptedException { 
    static int count; 
} 
+0

Link non punta a una pagina utile al momento, solo alla home page di java di oracle. – CoatedMoose

+1

@CoatedMoose ha corretto il collegamento – ewernli

0

Sì, c'è un ordinamento standard.

Se si utilizza un IDE, è possibile impostare fino a formattare il codice per voi, vale a dire in Eclipse in Preferenze -> Java -> Editor -> Salva azioni è possibile selezionare la casella "codice sorgente Format"

Quindi non devi più preoccuparti di questo. Sarà fatto automaticamente ogni volta che il file viene salvato e se tutto il tuo progetto lo usa, quindi per l'intero progetto ha un codice che è formattato nello stesso modo.

+0

Questo non riordina i modificatori AFAIK. Vedere https://bugs.eclipse.org/bugs/show_bug.cgi?id=322494 – dforce

1

L'ordine di utilizzo personalizzato dei modificatori è menzionato nello Java Language Specification (quindi non è necessario avere un'opinione personale ;-)) ad es.per method modifiers si trova la seguente definizione (estratto):

MethodModifiers: 
    MethodModifier 
    MethodModifiers MethodModifier 

MethodModifier: one of 
    Annotation public protected private abstract 
    static final synchronized native strictfp 

Se due o più (distinti) Metodo modificatori appaiono in una dichiarazione di metodo, è consuetudine, anche se non richiesto, che appaiono nell'ordine coerente con quello mostrato sopra nella produzione di MethodModifier.

Questa frase si trova in diversi altri luoghi in cui è specificato l'uso di modificatori, ad es. here per i modificatori di campo.

(Questo è per lo più copiato da un'altra mia risposta here).

23

Checkstyle (che implementa i suggerimenti delle specifiche sezioni linguaggio Java, 8.1.1, 8.3.1, e 8.4.3) dice:

  1. pubblico
  2. protetta
  3. privato
  4. astratto
  5. statica
  6. finale
  7. transitoria
  8. volatili
  9. sincronizzato
  10. nativo
  11. strictf
+0

Questo dovrebbe essere considerato la risposta corretta, poiché questo è l'ordine dedotto dal JLS. Checkstyle implementa correttamente questo correttamente. – Asturio

+0

Sarebbe bello avere questa funzione di eclissi invece: https://bugs.eclipse.org/bugs/show_bug.cgi?id=322494 – dforce

Problemi correlati