Campi statici in Java

Uomo che utilizza il computer

Immagini tetra/immagini Getty





Ci possono essere momenti in cui è utile avere valori condivisi tra tutte le istanze di una particolare classe. Campi statici e costanti statiche abilitare questo tipo di condivisione appartenendo al classe e non agli oggetti reali.

Il modificatore statico

Normalmente i campi ei metodi definiti in una classe possono essere utilizzati solo quando è stato creato un oggetto di quel tipo di classe. Ad esempio, considera una semplice classe Articolo che tiene traccia delle merci in un negozio:



|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Per poter utilizzare il metodo getItemName(), dobbiamo prima creare un oggetto Item, in questo caso, catFood:

|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Tuttavia, se il modificatore static è incluso in un campo o in una dichiarazione di metodo, non è richiesta alcuna istanza della classe per utilizzare il campo o il metodo: sono associati alla classe e non a un singolo oggetto. Se guardi indietro all'esempio sopra, vedrai che il modificatore static è già utilizzato in dichiarazione del metodo principale :



|_+_||_+_|

Il metodo principale è un metodo statico che non richiede l'esistenza di un oggetto prima di poter essere chiamato. Poiché main() è il punto di partenza per qualsiasi applicazione Java, in effetti non esistono già oggetti per chiamarla. Potresti, se hai voglia di avere un programma che chiama continuamente se stesso, fare questo:

|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Non molto utile, ma nota come il metodo main() può essere chiamato senza un'istanza di una classe StaticExample.

Che cos'è un campo statico?

I campi statici sono anche conosciuti come campi di classe. Sono semplicemente campi che hanno il modificatore static nelle loro dichiarazioni. Ad esempio, torniamo alla classe Item e aggiungiamo un campo statico:

|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

I campi itemId e itemName sono normali campi non statici. Quando viene creata un'istanza di una classe Item, questi campi avranno valori contenuti all'interno di quell'oggetto. Se viene creato un altro oggetto Item, anch'esso avrà i campi itemId e itemName per la memorizzazione dei valori.



Il campo statico uniqueId, tuttavia, contiene un valore che sarà lo stesso in tutti gli oggetti Item. Se sono presenti 100 oggetti Item, ci saranno 100 istanze dei campi itemId e itemName, ma solo un campo statico uniqueId.

Nell'esempio precedente, uniqueId viene utilizzato per assegnare a ciascun oggetto Item un numero univoco. Questo è facile se ogni oggetto Item creato prende il valore corrente nel campo statico uniqueId e quindi lo incrementa di uno. L'uso di un campo statico significa che ogni oggetto non ha bisogno di conoscere gli altri oggetti per ottenere a ID univoco . Questo potrebbe essere utile se si desidera conoscere l'ordine in cui sono stati creati gli oggetti Item.



Che cos'è una costante statica?

Le costanti statiche sono esattamente come i campi statici tranne per il fatto che i loro valori non possono essere modificati. Nella dichiarazione sul campo, il finale e statico vengono utilizzati entrambi i modificatori. Ad esempio, forse la classe Item dovrebbe imporre una restrizione sulla lunghezza di itemName. Potremmo creare una costante statica maxItemNameLength:

|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Come per i campi statici, le costanti statiche sono associate alla classe piuttosto che a un singolo oggetto:



|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Ci sono due cose importanti da notare sulla costante statica maxItemNameLength:

  • È dichiarato campo pubblico. In genere è una cattiva idea rendere pubblico un campo in qualsiasi classe che progetti, ma in questo caso non importa. Il valore della costante non può essere modificato.
  • La costante statica viene utilizzata dal nome della classe Item, non da un oggetto Item.

Le costanti statiche possono essere visualizzate in tutta l'API Java. Ad esempio, il classe wrapper intera ne ha due che memorizzano i valori massimo e minimo e un int