Qual è la differenza tra final e static in Java?


Migliore risposta

Uh, sono concetti completamente diversi.

Un membro contrassegnato come static appartiene alla classe, piuttosto che a unistanza particolare. A volte, le classi possono avere solo membri statici, con un ovvio esempio è la classe java.lang.Double che “inscatola” doppie primitive: potresti ottenere il valore di un singolo double tramite un metodo di istanza (myDouble.doubleValue()) ma ottieni cose “universali” tramite membri statici (Double.MAX\_VALUE).

Un membro contrassegnato come final non può * avere il suo valore (che è il suo valore se primitiva, o il suo riferimento se oggetto) è cambiato una volta inizializzato. Potresti ancora essere in grado di modificare le proprietà di un oggetto (potrebbe essere modificabile ) ma non puoi * sostituire loggetto con un altro. (* Tecnicamente puoi “barare” con la riflessione, la manipolazione del bytecode o altri modi per “infrangere le regole”, ma se fai quelli che presumibilmente conosci tu ” re “cheating”.)

Rispondi

Per sapere quando usare

private static final X x;

Dovresti sapere qual è luso di queste parole chiave.

Vediamo

  1. privato – Viene utilizzato quando vuoi limitare determinati membri di una classe a non essere accessibile al di fuori di quella classe.
  2. statico – Quando dichiari statico un membro, è collegato alla sua classe e non alloggetto. Per semplificarlo, il membro statico verrà inizializzato quando la classe viene caricata. Pertanto, ogni volta che si aggiorna il valore di quel membro, verranno aggiornati anche tutti i posti in cui si fa riferimento. Pertanto, si accede al membro statico in base al nome della classe e non ai loro oggetti poiché il valore del membro rimarrà lo stesso indipendentemente dagli oggetti.
  3. final – Questa parola chiave, se usata con variabili membro, definisce che una volta che la classe è stata caricata e il valore è stato assegnato, non può essere modificata.

Quindi vediamo cosa succede quando dichiari una variabile come di seguito:

private static final String PRIVATE\_STATIC\_FINAL\_STRING = "String";

Ora,

PRIVATE\_STATIC\_FINAL\_STRING è definita privata quindi ha vinto “t essere accessibile al di fuori della sua” classe dichiarante. È definito anche come statico, quindi il suo valore rimarrà lo stesso indipendentemente dagli oggetti della “classe”. Ed è definito come finale, quindi una volta che la classe è caricata, il suo valore non verrà modificato.

Quindi, PRIVATE\_STATIC\_FINAL\_STRING funzionerà come una stringa a livello di classe non modificabile che non sarà accessibile al di fuori della sua classe dichiarante.

Spero che questo ti aiuti a chiarire i tuoi dubbi. Se hai bisogno di ulteriore aiuto, puoi metterti in contatto con me e cercherò di aiutarti il ​​più possibile.

Buona fortuna e buon apprendimento!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *