2011-11-11 17 views
21

Perché le costanti java sono dichiarate statiche?perché le costanti java sono dichiarate statiche?

class Foo{ 
    static final int FII = 2 ; 
} 

In questo ho capito l'uso del finale? Compra perché deve essere statico? Perché dovrebbe essere una variabile di classe e non una variabile di istanza?

+8

Perché vuoi che più di una istanza abbia la propria copia di 'FII'? –

+1

Posso dichiarare 'final int FII = 2;' bene. –

+0

@JonLin: è possibile, ma non si dovrebbe poiché non aggiunge valore ma aumenta solo l'utilizzo della memoria. L'eccezione sarebbe l'inizializzazione della costante nella chiamata del costruttore - quindi ogni istanza potrebbe avere il proprio valore costante (costante dopo l'esecuzione del costruttore) e potrebbe avere un valore come "constructionTime" o simile. –

risposta

26

Se può variare a seconda dell'istanza di una classe, non è chiaramente una costante . Cosa significherebbe ottenere un valore diverso di pi per ogni istanza di Math (non che Math consente anche di creare istanze)? O un diverso ordine maiuscolo/minuscolo per ogni istanza di String?

12

È semplicemente così che è possibile accedervi senza un'istanza di quella classe.

Richiedere che un'istanza sia creata solo per accedere ai campi costanti è un po 'uno spreco di risorse.

76

Se una costante non è statica, Java allocherà una memoria per quella costante in ogni oggetto della classe (cioè una copia della costante per oggetto).

Se una costante è statica, ci sarà una sola copia della costante per quella classe (cioè una copia per classe).

Pertanto, se la costante ha un solo valore, deve essere dichiarato statico.

Se la costante potrebbe avere un valore diverso per ogni oggetto, ad esempio il tempo di creazione dell'oggetto, non dovrebbe essere dichiarato statico.

+4

Risposta molto bella e tecnica, grazie mille. –

Problemi correlati