Qual è un ordine ragionevole dei modificatori Java (astratto, finale, pubblico, statico, ecc.)?


114

Qual è un ordine ragionevole dei modificatori Java?

  • astratto
  • finale
  • nativo
  • privato
  • protetta
  • pubblico
  • statico
  • strictf
  • sincronizzato
  • transitorio
  • volatile

Aggiornare

Ho cambiato la formulazione da consigliato a ragionevole per calmare le discussioni sul fatto che l'ordine sia consigliato o meno.


Non importa minimamente, e non dovresti perdere troppo tempo a tormentarti. Personalmente ho sempre messo prima il modificatore di accesso, ma dopo non ho potuto nemmeno dirti cosa fare dopo. Se vuoi un riferimento, prova qui , ma non sono sicuro che sia nemmeno specificato lì.
Marchese di Lorne

9
Mi chiedo perché questa dovrebbe essere una domanda "non costruttiva" (richieste vicine). Puoi trovare la raccomandazione nelle specifiche (vedi la mia risposta) e seguire questa raccomandazione migliorerà la leggibilità del codice. L'analizzatore di codice statico (come SONAR) si lamenterà se usi un ordine diverso.
FrVaBe

Ho dato un'altra occhiata alle convenzioni del codice Oracle / Sun Java . La questione non viene nemmeno menzionata, nell'unico posto in cui dovresti guardare e in quello in cui ti aspetteresti che appaia.
Marchese di Lorne

@EJB Le convenzioni del codice risalgono al 1999 e hanno fortemente bisogno di essere aggiornate. Spero che includano questo argomento se toccheranno di nuovo queste convenzioni perché è davvero un buon posto!
FrVaBe

1
Eclipse può ordinare automaticamente i modificatori? O almeno dare un avvertimento se non sono ordinati?
Roland

Risposte:


126

L' ordine di utilizzo abituale dei modificatori è menzionato nella specifica del linguaggio Java (e non nella specifica della Java Virtual Machine), ad esempio per i modificatori di classe troverai la seguente definizione (estratto):

ClassModifiers:
    ClassModifier
    ClassModifiers ClassModifier

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

[....]

Se due o più modificatori di classe (distinti) compaiono in una dichiarazione di classe, è consuetudine, sebbene non obbligatorio, che compaiano nell'ordine coerente con quello mostrato sopra nella produzione per ClassModifier. (piccolo testo in fondo al paragrafo!)

Troverete questa frase in molti altri posti in cui è specificato l'uso dei modificatori, ad esempio qui per i modificatori di campo.

Aggiornamento : ho sostituito "specificato / consigliato" con "consuetudine" per rendere questa una risposta accettabile. Tienilo in considerazione se leggi i commenti ;-) (grazie @EJP per chiarirlo) - Tuttavia io vorrei raccomandare di utilizzare il consueto ordine.

Anche Google consiglia utilizzare l'ordine consueto menzionato nelle specifiche Java.

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

Aggiornamento : c'è una nuovainiziativa " Linee guida per lo stile Java " in atto per i progetti nella comunità OpenJDK. Ha anche una raccomandazione per un ordine di modifica e include anche il nuovomodificatore predefinito di Java 8.

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

1
La domanda era "Qual è l'ordine consigliato dei modificatori Java?" e questa domanda trova risposta nelle specifiche della lingua (e poiché l'ordine non è richiesto, direi che è consigliato nelle specifiche). La specifica JVM riguarda il formato del file di classe e non il codice sorgente Java. - In effetti l'ordine non ha importanza ma se segui una raccomandazione il tuo codice sarà più leggibile agli altri. Quindi penso che questa sia una domanda ragionevole a cui si può dare una risposta precisa. A proposito, l'analizzatore di codice statico (ad esempio SONAR) si complane per l'ordine sbagliato.
FrVaBe

3
La frase Se due o più modificatori di classe (distinti) compaiono in una dichiarazione di classe, è consuetudine, sebbene non obbligatorio, che appaiano nell'ordine coerente con quello mostrato sopra nella produzione per ClassModifier. FA PARTE DELLA SPECIFICA!
FrVaBe

1
In questo caso volevo gridare ma mi sono già calmato - mi dispiace tanto ;-) - Anche io non sono nativo - quindi probabilmente hai ragione sull'interpretazione linguistica. Quello che volevo solo dire con la mia risposta è che esiste un luogo molto ufficiale in cui viene gestito l'ordine dei modificatori nel codice sorgente Java - e sono stato fortunato a trovarlo quando ho posto la stessa domanda a me stesso. IMHO non c'è posto migliore per trovare la risposta che nelle specifiche del linguaggio Java.
FrVaBe


1
@EJP Hai una forte opinione (~ nessun ordine consigliato) su questo argomento. Saresti così gentile da fornire questa risposta? Sono curioso del voto.
FrVaBe

28

È ragionevole utilizzare l'ordine in base alle specifiche della Java Virtual Machine, Tabella 4.4

  • pubblico
  • protetta
  • privato
  • astratto
  • predefinito
  • statico
  • finale
  • transitorio
  • volatile
  • sincronizzato
  • nativo
  • strictf

8
+1 vedi spesso: "public abstract", "private static final" ecc. Alcuni IDE (ad es. NetBeans) hanno anche alcune scorciatoie, ad es. "Psf" o "Psf"
Puce

1
È possibile trovare l'ordine consigliato nelle specifiche del linguaggio Java (e non nelle specifiche della Java Virtual Machine!). Dai un'occhiata alla mia risposta.
FrVaBe

1
@FrVaBe Non riesci a trovare nulla di simile. Non confondere la grammatica della lingua con i consigli di stile.
Marchese di Lorne

@Puce: alcuni IDE (ad esempio IntelliJ IDEA) possono persino ordinare correttamente i modificatori.
Mot

5

Basato sui loro valori int.

Modificatore (Java Platform SE 8)

  • 1: pubblico
  • 2: privato
  • 4: protetto
  • 8: statico
  • 16: finale
  • 32: sincronizzato
  • 64: volatile
  • 128: transitorio
  • 256: nativo
  • 512: interfaccia
  • 1024: astratto
  • 2048: strictfp

1
questa risposta non include la parola chiave "default"
Sero

1
Cosa c'entrano i loro valori int?
Marchese di Lorne

0

Uso due regole per ricordare la sequenza del modificatore, ma non include il strictfp, poiché non viene mai usato da me. FYI.

  1. nativi sincronizzati sono le persone con la priorità minima.

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

:)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.