Sintassi e formato dei modificatori Java

Mi trovo a confondermi con l’ordine dei modificatori di accesso e non di accesso. Per esempio

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 mi sbaglio perché ci sono così tante combinazioni possibili. C’è una guida definitiva su quale dovrebbe venire prima dell’altra?

C’è qualche descrizione del formato e dell’ordine in cui devono apparire nel codice? Sto cercando di trovare una guida per la syntax, ma non sono sicuro che sia corretta al 100%. Ecco qui:

 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 

Dalla grammatica ufficiale 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 

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

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

L’ordine corretto (o piuttosto convenzionale) è:

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

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

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

I modificatori precedono la class o un tipo. Secondo la specifica del linguaggio Java , l’ordine tra i modificatori non ha importanza.

Sì, c’è la specifica del linguaggio Java , che spiega tutta la syntax valida nella lingua e ci sono anche le convenzioni di codifica utilizzate da Oracle / Sun , che è un po ‘vecchio ma spiega ancora molte cose.