2011-08-13 11 views
11

Mi ritrovo a confondermi con l'ordine dei modificatori di accesso e non di accesso. Per esempioSintassi e formato dei modificatori Java

abstract void go() 
abstract public void go() 
public final void go() 
void final go() 

final class Test{} 
class final Test{} 
final abstract class Test{} 
abstract final Test{} 

Non so mai quale sia l'ordine corretto ea volte ho sbagliato perché ci sono così tante combinazioni possibili. C'è una guida definitiva su quale dovrebbe venire prima dell'altra?

Esiste una descrizione del formato e dell'ordine in cui devono essere visualizzati nel codice? Sto cercando di trovare una guida per la sintassi, ma non sono sicuro che sia corretta al 100%. Eccolo:

Methods: 
[access modifier | nonaccess modifier] return-type method-name 

Classes: 
[access modifier | nonaccess modifier] class class-name 

Interfaces: 
[access modifier | nonaccess modifier] interface interface-name  

Variables: 
[access modifier | nonaccess modifier] variable-type variale-name 
+0

Non esiste un ordine corretto, ergo non è una domanda reale. – EJP

risposta

18

dalla Gazzetta grammar del linguaggio di programmazione Java (semplificato):

Modifier: 
    Annotation | public | protected | private 
    static | abstract | final | native | synchronized 
    transient | volatile | strictfp 

ClassOrInterfaceDeclaration: 
     {Modifier} (ClassDeclaration | InterfaceDeclaration) 

ClassBodyDeclaration: 
     {Modifier} MethodOrFieldDecl 

MethodOrFieldDecl: 
     Type Identifier MethodOrFieldRest 

Così, per le classi e le interfacce, i modificatori devono sempre comparire davanti la parola chiave class, e in qualsiasi ordine. Ad esempio, final public class è valido, ma non lo è class final. Per metodi e campi, è lo stesso, ma i modificatori devono apparire prima del tipo.

+3

Nota: qualsiasi ordine di modificatori è ** valido **, ma è più facile per le persone leggere il codice se tutto il codice in un progetto utilizza un ordine coerente. Per questo motivo, esiste un ordine * consueto * (vedere la frase in caratteri piccoli alla fine della specifica Java 8.3.1)] (http://docs.oracle.com/javase/specs/jls/se7/html/jls -8.html # jls-8.3.1) che è stato ampiamente adottato, [ad es da Google] (https://google-styleguide.googlecode.com/svn/trunk/javaguide.html#s4.8.7-modifiers); molti strumenti java incoraggiano questo ordine. – ToolmakerSteve

+2

Si noti che Java 8 aggiunge 'default' alle dichiarazioni dei metodi di interfaccia: http://docs.oracle.com/javase/specs/jls/se8/html/jls-19.html#jls-19-9 che dall'ordine in la grammatica viene dopo 'public' e' abstract'. –

11

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

la correttezza (o meglio, convenzionale) ordine è:

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

Questo ordine dovrebbe venire naturalmente in mente dopo alcuni giorni di programmazione in Java.

3

Proprio come in lingua inglese, gli aggettivi (modificatori come public, static, volatile, ecc) precedere il sostantivo che descrivono (class, interface, o qualsiasi tipo come ad esempio int o String). L'ordine dei modificatori non ha importanza per la lingua, ma leggendo il codice troverai rapidamente la sensazione più naturale.

Problemi correlati