2011-11-11 16 views
21

Dlaczego stałe Java są zadeklarowane jako statyczne?dlaczego stałe Java są zadeklarowane jako statyczne?

class Foo{ 
    static final int FII = 2 ; 
} 

W tym rozumiem korzystanie z ostatecznego? Kup dlaczego to musi być statyczne? Dlaczego powinna to być zmienna klasy, a nie instancja?

+8

Dlaczego chcesz, aby więcej niż jedna instancja miała własną kopię 'FII'? –

+1

Mogę zadeklarować 'końcowy int FII = 2;' w porządku. –

+0

@ JonLin: Możesz, ale nie powinieneś, ponieważ nie dodaje wartości, ale tylko zwiększa wykorzystanie pamięci. Wyjątkiem byłaby inicjalizacja stałej w wywołaniu konstruktora - wtedy każda instancja mogłaby mieć własną stałą wartość (stałą po uruchomieniu konstruktora) i mogła mieć wartość taką jak "constructionTime" lub podobna. –

Odpowiedz

26

Jeśli może się różnić w zależności od klasy, to wyraźnie nie jest stała . Co to znaczy uzyskać inną wartość pi dla każdego wystąpienia z Math (nie, że Math pozwala nawet na konstruowanie instancji)? Lub inny porządek niewrażliwy na wielkość liter dla każdego wystąpienia String?

12

Jest to po prostu tak, że można uzyskać do nich dostęp bez instancji tej klasy.

Wymaganie, aby instancja została utworzona tylko w celu uzyskania dostępu do stałych pól, jest po prostu marnowaniem zasobów.

76

Jeśli stała nie jest statyczna, Java przydzieli pamięć dla tej stałej w każdym obiekcie klasy (tj. Jednej kopii stałej na obiekt).

Jeśli stała jest statyczna, będzie tylko jedna kopia stałej dla tej klasy (tj. Jedna kopia na klasę).

Dlatego jeśli stała ma tylko jedną wartość, powinna być zadeklarowana jako statyczna.

Jeśli stała może mieć inną wartość dla każdego obiektu, na przykład czas utworzenia obiektu, nie należy go deklarować jako statyczny.

+4

Bardzo dobra i techniczna odpowiedź, dziękuję bardzo. –

Powiązane problemy