2013-08-22 32 views
7

Sono nuovo di java quindi probabilmente una domanda molto niubbo:impostazione di una variabile statica in Java

Ho una classe

public class Foo{ 
    private static String foo; 
    private String bar; 

    public Foo(String bar){ 
     this.bar = bar; 
    } 

} 

Ora, prima di un'istanza di qualsiasi oggetto per la classe Foo, voglio impostare quella variabile statica foo. che verrà utilizzato nella classe .. Come faccio?

Inoltre, si prega di correggere la mia comprensione. il valore di foo sarà uguale su tutti gli oggetti, quindi ha senso dichiararlo come statico? destra?

+0

Basta scrivere 'private static String foo =" MyValue ";' Sarà diverso a seconda delle decisioni di runtime? –

+0

Vuoi che sia impostato su un valore costante? O cambiare il suo valore a volte? Un valore nullo è accettabile? – Raedwald

risposta

8
public class Foo{ 
    private static String foo = "initial value"; 
    private String bar; 

    public Foo(String bar){ 
     this.bar = bar; 
    } 

} 

Poiché il valore sarà lo stesso in tutti gli oggetti, static è la cosa giusta da usare. Se il valore non è solo static ma anche senza mai cambiare, allora si dovrebbe fare questo, invece:

public class Foo{ 
    private static final String FOO = "initial value"; 
    private String bar; 

    public Foo(String bar){ 
     this.bar = bar; 
    } 

} 

Notate come la capitalizzazione cambiato lì? Questa è la convenzione di Java. "Costanti" sono NAMED_LIKE_THIS.

5
  1. foo saranno condivisi tra tutte le istanze di Foo
  2. Per inizializzare esso:

Opzione A

private static String foo = "static variable";

Opzione B

private static String foo; 

static { 
    foo = "static variable"; 
} 

L'opzione B viene utilizzata raramente, soprattutto quando vi sono alcune interdipendenze tra variabili statiche o potenziali eccezioni.

In entrambi i casi, l'init statico avverrà quando la classe viene caricata.

2

Come dichiarato dalle altre risposte, è necessario impostare il valore iniziale in questo modo:

private static String foo = "initial value"; 

Inoltre, se si desidera accedere a questa variabile da qualsiasi luogo, è necessario fare riferimento in un contesto statico, come così:

Foo.foo 

dove Foo è il nome della classe, e foo è il nome della variabile.

Questo è in realtà molto utile per comprendere il concetto di variabili statiche. Anziché fare riferimento a foo come membro di qualche istanza della classe Foo, si fa riferimento a foo come membro della classe stessa. Pertanto, per tutte le istanze di Foo, il valore di foo sarà lo stesso poiché appartiene alla classe e non all'istanza .

All'interno della classe Foo, è possibile ottenere semplicemente chiamando foo senza qualificarlo con un nome di classe.

Problemi correlati