2011-09-27 23 views
34

Eventuali duplicati:
private final static attribute vs private final attributestatico variabile finale in Java

Qual è la differenza tra la dichiarazione di una variabile come

static final int x = 5; 

o

final int x = 5; 

Se voglio solo che la variabile sia locale e costante (non può essere modificata in seguito)?

Grazie

+2

Se questa è una variabile (al contrario di un campo), non può essere statica. – Thilo

+0

Questo è stato discusso prima in questa [domanda] (http://stackoverflow.com/questions/1415955/private-final-static-attribute-vs-private-final-attribute). –

+0

Questo non è un duplicato come attualmente indicato. Questa domanda riguarda l'utilizzo di "statico finale" con una variabile metodo-locale, la domanda collegata lo utilizza come variabile classe/oggetto (al di fuori di qualsiasi definizione di metodo). Penso che la risposta sia che usare "finale" all'interno di un metodo fa quello che ci si potrebbe aspettare da "statico finale" in quel contesto, il più delle volte.Tuttavia, mi chiedo se fosse un oggetto invece di un int, se la mutabilità potrebbe produrre risultati che differiscono da questa intuizione. Non ho provato questo. Qualcuno sa? – Apriori

risposta

31

Il solo fatto avrà l'effetto desiderato.

Dichiarare statica sta rendendo una variabile di classe, questo sarebbe accessibili tramite il nome della classe <ClassName>.x.

5

In prima dichiarazione si definisce variabile, comune per tutti gli oggetti (campo statico della classe).

Nella seconda istruzione si definisce la variabile, che appartiene a ciascun oggetto creato (un sacco di copie).

Nel tuo caso dovresti usare il primo.

29

Dichiarare il campo come "finale" assicurerà che il campo sia una costante e non possa cambiare. La differenza deriva dall'uso della parola chiave 'statica'.

Dichiarare un campo come statico significa che è associato al tipo e non alle istanze. Ad esempio, solo una copia del campo sarà presente per tutti gli oggetti e non una copia individuale per ciascun oggetto. A causa di ciò, è possibile accedere ai campi statici attraverso il nome della classe.

Come potete vedere, il vostro requisito che il campo sia costante si ottiene in entrambi i casi (dichiarando il campo come "finale" e come "statico finale").

domanda simile è private final static attribute vs private final attribute

Speranza che aiuta

3

Per i tipi primitivi, la 'finale statica' sarà una dichiarazione corretta per dichiarare una costante. Una variabile finale non statica ha senso quando è un riferimento costante a un oggetto. In questo caso ogni istanza può contenere il proprio riferimento, come mostrato in JLS 4.5.4.

Vedere la risposta di Pavel per la risposta corretta.

Problemi correlati