2013-08-22 19 views
7

Jestem nowy Java stąd prawdopodobnie bardzo noobem pytanie:ustawienie zmiennej statycznej w java

Mam klasy

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

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

} 

Teraz przed I instancji dowolnego obiektu dla klasy Foo, chcę ustawić ta zmienna statyczna foo. , które będą używane w klasie. Jak to zrobić?

Ponadto proszę poprawić moje zrozumienie. wartość foo będzie taka sama we wszystkich obiektach, dlatego sensowne jest uznanie go za statyczny? dobrze?

+0

Po prostu napisz "private static String foo =" MyValue ";' Czy będzie się różnić w zależności od decyzji czasu wykonania? –

+0

Czy chcesz ustawić go na stałą wartość? A może czasami zmieniasz jego wartość? Czy dopuszczalna jest wartość pusta? – Raedwald

Odpowiedz

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

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

} 

Ponieważ wartość będzie taka sama we wszystkich obiektach, static jest słuszne w użyciu. Jeżeli wartość jest nie tylko static ale też nigdy się nie zmienia, to należy to zrobić w zamian:

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

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

} 

zauważyć, jak kapitalizacja nie zmieniło? To jest konwencja java. "Stałe" to NAMED_LIKE_THIS.

5
  1. foo będą dzielone między wszystkich wystąpień Foo
  2. Aby zainicjować go:

Wariant A

private static String foo = "static variable";

Wariant B

private static String foo; 

static { 
    foo = "static variable"; 
} 

Opcja B jest rzadko wykorzystywana, głównie wtedy, gdy istnieją pewne zależności między statycznymi zmiennymi lub potencjalnymi wyjątkami.

W obu przypadkach statyczny init nastąpi po załadowaniu klasy.

2

Jak stwierdzono przez innych odpowiedzi, należy ustawić wartość początkową tak:

private static String foo = "initial value"; 

Dodatkowo, jeśli chcesz uzyskać dostęp do tej zmiennej z dowolnego miejsca, trzeba odwołać go w statycznym kontekście, jak tak:

Foo.foo 

gdzie Foo jest nazwą klasy, a foo jest nazwą zmiennej.

Jest to bardzo przydatne w zrozumieniu pojęcia zmiennych statycznych. Zamiast odwoływania się do foo jako członka pewnej instancji klasy Foo, odwołujesz się do foo jako członka samej klasy. Tak więc dla wszystkich instancji Foo wartość foo będzie taka sama, ponieważ jest własnością klasy , a nie instancji.

Wewnątrz klasy Foo możesz uciec tylko dzwoniąc pod numer foo, nie kwalifikując go z nazwą klasy.

Powiązane problemy