-
Il modificatore di accesso , che descrive l'accessibilità di una classe, oggetto o campo, è obbligatorio: in sua assenza, la JVM (questa è una tale fonte di magia universale) assegna automaticamente un identificatore predefinito al pacchetto.
A partire dal secondo modificatore ci sono i modificatori di non accesso, che non sono obbligatori e possono anche entrare in conflitto tra loro (ma andiamo con ordine).
-
Il modificatore Statico indica che la classe, l'oggetto o il campo è statico. Ma cosa significa? In sostanza lo proveremo sui campi.
Le variabili statiche sono chiamate variabili di classe e sono univoche per tutte le istanze di quella classe. I metodi statici possono essere chiamati senza creare l'oggetto in cui sono dichiarati. Le classi statiche vengono utilizzate quando si annida una classe in un'altra e il principio di interazione tra la classe interna e quella esterna è simile ai metodi (questo è un argomento per una discussione separata). Può essere utilizzato anche come blocco separato all'interno di un oggetto.
-
Il modificatore Finale indica effettivamente a una variabile che è una costante. Per i metodi - che non possono essere sovrascritti durante l'ereditarietà, ma per le classi ciò indica che non possono essere ereditati da essi (immutabili).
I modificatori statici e finali si applicano a classi, oggetti e campi. Tuttavia, ci sono modificatori che si applicano solo ad alcuni di essi (o anche a parte di essi, poiché sia una variabile che un metodo sono un campo, ma non tutti i modificatori si applicano a entrambi). Se tracciamo un'analogia, solo stivali e guanti possono essere incantati per la velocità (per farli muovere più velocemente), ma incantare un cappello per la velocità è inutile (e il Consiglio di supervisione universale (compilatore) non lo consentirà).
-
Il modificatore Abstract si applica solo a metodi e classi . Un metodo astratto è un metodo senza implementazione (corpo).
Se una classe è contrassegnata come astratta, contiene metodi astratti oppure viene eseguita per impedire la creazione di istanze di quella classe. Se tracciamo un'analogia, al centro delle istruzioni puoi vedere la voce "Colorare un oggetto", dopo la quale non c'è descrizione. Quelli. usando questa istruzione puoi creare un oggetto e puoi anche colorarlo, ma questa particolare istruzione non dice come (scrivi le tue istruzioni per creare un oggetto rosso basato su questo oggetto e descrivi come colorarlo).
-
Il modificatore Syncronized viene utilizzato solo per i metodi. La sua presenza indica che solo un thread alla volta può eseguirlo. Può essere utilizzato anche come blocco di codice separato all'interno di un oggetto (specificando l'oggetto di sincronizzazione).
-
Modificatore volatile : solo per le variabili . Se ne consiglia l'utilizzo per variabili che possono essere utilizzate simultaneamente da più thread. Una variabile con tale modificatore viene immediatamente copiata dalla cache del processore alla memoria principale ogni volta che cambia, consentendo ai thread paralleli di ricevere il valore più recente.
Vale la pena notare che volatile è applicabile nei casi in cui solo un thread può scrivere su una variabile e il resto può solo leggere da essa. Negli altri casi è meglio aggiungere il modificatore sincronizzato ai metodi che scrivono su una variabile volatile.
-
Modificatore transitorio – solo per le variabili . Questo modificatore contrassegna le variabili che devono essere saltate durante la serializzazione di un oggetto (questo è un processo così intelligente che, in linea di principio, puoi leggerlo tu stesso...)*
* - Ho scritto questo articolo al livello 17 e fino ad allora la serializzazione come processo non era stata descritta, quindi invece di copiare e incollare, ti consiglio di studiarlo tu stesso, se necessario.
- Finale e Volatile - quando si tratta di variabili, non possiamo dire contemporaneamente che è finale (costante) e che più thread hanno la capacità di cambiarla... Dopotutto, è costante e in qualsiasi momento un thread può leggerla , ma nessun thread può modificare la costante (il Consiglio di Vigilanza Universale non lo consentirà).
- Finali e astratti : le classi e i metodi non possono essere sia astratti (il che nella maggior parte dei casi implica la necessità di chiarirli per l'implementazione) che finali, cioè immutabile. Si scopre che le istruzioni dicono come creare un buon casco durevole da qualsiasi materiale (parte astratta), ma per questo non devono esserci buchi (la parte finale obbligatoria, non può essere modificata).
- Astratto e statico : un metodo astratto non può essere statico o sincronizzato allo stesso tempo. Un metodo statico astratto non ha senso, perché non solo non fa nulla, ma appartiene anche a un'intera classe: il risultato è una cosa inutile.
- Abstract e sincronizzato : che senso ha sincronizzare il lavoro con un metodo che non fa nulla?
GO TO FULL VERSION