JavaRush /Java Blog /Random-IT /Modificatori o come lanciare incantesimi nel mondo Java
Petr Gorskin
Livello 22
Москва

Modificatori o come lanciare incantesimi nel mondo Java

Pubblicato nel gruppo Random-IT
Buona giornata galattica, compagni! Questo è il mio primo manoscritto interplanetario e, poiché sono un ingegnere, l'interpretazione di alcuni concetti può essere fatta in un linguaggio extraterrestre.
Modificatori o come lanciare incantesimi nel mondo di Java - 1
Introduzione Secondo me Java è come un corridoio infinito con porte (pacchetto). Dietro ciascuna di queste porte c'è spazio libero e uno schedario in cui è conservata una montagna di pergamene magiche con istruzioni (classi) per la creazione di oggetti. Ogni pergamena descrive un insieme di caratteristiche (variabili) e abilità (metodi) - azioni (campi) eseguite sulla classe stessa o su un oggetto assemblato sulla sua base. A questo punto, immaginiamoci come dei maghi e proviamo a creare un'istruzione (classe) completamente nuova. Quindi: Modificatori o come lanciare incantesimi nel mondo Java - 2beviamo l'elisir della saggezza (impariamo le basi) e iniziamo a scrivere le istruzioni. Modificatori di accesso e non accesso Immaginiamo che qualsiasi istruzione e oggetto creato sulla sua base, così come le sue caratteristiche e abilità, saranno inizialmente magicamente incantati, ad es. verranno assegnati set specifici di modificatori. Proviamo a creare una guida sui possibili incantesimi.
  1. 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).

  2. 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.

  3. 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à).

  4. 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).

Quando si lavora in un ambiente multi-thread, è possibile utilizzare modificatori speciali:
  1. 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).

  2. 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.

  3. Modificatore transitoriosolo 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.

Coppie di modificatori in conflitto Oltre all'applicabilità dei modificatori a varie classi, oggetti e campi, esiste anche il concetto di coppie in conflitto. Diciamo che incantare un elmo con la forza lo rende pesante, e allo stesso tempo si vuole incantarlo perché sia ​​leggero. L'uno non combacia con l'altro.
  1. 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à).
  2. 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).
  3. 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.
  4. Abstract e sincronizzato : che senso ha sincronizzare il lavoro con un metodo che non fa nulla?
Riassumendo Quindi, la descrizione dei modificatori è finita, tutti i conflitti sono stati risolti e ora puoi consolidare il risultato con un cheat sheet - un diagramma degli incantesimi: Modificatori o come lanciare incantesimi nel mondo di Java - 3In conclusione, voglio dire che scrivere questo articolo è stata la realizzazione del mio desiderio studiare i modificatori. Sta a te giudicare se l'esperienza avrà successo o meno. Aspetto i vostri suggerimenti per migliorarlo/correggerlo e, magari insieme, ne faremo un manuale molto utile per i giocatori java principianti.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION