Pola statyczne w Javie

Mężczyzna korzystający z komputera

Obrazy Tetra/Getty Images





Może się zdarzyć, że warto mieć wartości, które są współużytkowane we wszystkich wystąpieniach określonej klasy. Pola statyczne i stałe statyczne włączyć ten rodzaj udostępniania poprzez przynależność do klasa a nie do rzeczywistych obiektów.

Modyfikator statyczny

Normalnie pola i metody zdefiniowane w klasie mogą być używane tylko wtedy, gdy został utworzony obiekt tego typu klasy. Rozważmy na przykład prostą klasę Item, która śledzi towary w sklepie:



|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Aby móc korzystać z metody getItemName(), musimy najpierw utworzyć obiekt Item, w tym przypadku catFood:

|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Jeśli jednak modyfikator static jest zawarty w deklaracji pola lub metody, nie jest wymagana żadna instancja klasy, aby użyć pola lub metody — są one powiązane z klasą, a nie z pojedynczym obiektem. Jeśli spojrzysz wstecz na powyższy przykład, zobaczysz, że modyfikator statyczny jest już używany w deklaracja metody głównej :



|_+_||_+_|

The główna metoda jest metoda statyczna to nie wymaga istnienia obiektu, zanim będzie można go wywołać. Ponieważ main() jest punktem wyjścia dla każdej aplikacji Java, w rzeczywistości nie istnieją żadne obiekty, które mogłyby ją wywołać. Mógłbyś, jeśli miałbyś ochotę mieć program, który ciągle się wywołuje, zrób tak:

|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Niezbyt przydatne, ale zauważ, jak można wywołać metodę main() bez wystąpienia klasy StaticExample.

Co to jest pole statyczne?

Pola statyczne są również nazywane polami klas. Są to po prostu pola, które mają w swoich deklaracjach modyfikator static. Na przykład wróćmy do klasy Item i dodajmy pole statyczne:

|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Pola itemId i itemName są zwykłymi polami niestatycznymi. Kiedy tworzona jest instancja klasy Item, pola te będą miały wartości przechowywane wewnątrz tego obiektu. Jeśli zostanie utworzony inny obiekt Item, również będzie miał pola itemId i itemName do przechowywania wartości.



Pole statyczne uniqueId zawiera jednak wartość, która będzie taka sama we wszystkich obiektach Item. Jeśli istnieje 100 obiektów Item, będzie 100 wystąpień pól itemId i itemName, ale tylko jedno pole statyczne uniqueId.

W powyższym przykładzie, uniqueId służy do nadania każdemu obiektowi Item unikalnego numeru. Jest to łatwe, jeśli każdy tworzony obiekt Item pobiera bieżącą wartość w polu statycznym uniqueId, a następnie zwiększa ją o jeden. Użycie pola statycznego oznacza, że ​​każdy obiekt nie musi wiedzieć o innych obiektach, aby uzyskać a unikalny identyfikator . Może to być przydatne, jeśli chcesz poznać kolejność tworzenia obiektów Item.



Co to jest stała statyczna?

Stałe statyczne są dokładnie takie jak pola statyczne, z wyjątkiem tego, że ich wartości nie można zmienić. W deklaracji pola finał oraz statyczny używane są modyfikatory. Na przykład, być może klasa Item powinna nałożyć ograniczenie na długość itemName. Moglibyśmy stworzyć stałą statyczną maxItemNameLength:

|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Podobnie jak w przypadku pól statycznych, stałe statyczne są powiązane z klasą, a nie z pojedynczym obiektem:



|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Należy zwrócić uwagę na dwie ważne kwestie dotyczące stałej statycznej maxItemNameLength:

  • Jest deklarowane jako pole publiczne. Generalnie upublicznienie pola w dowolnej projektowanej klasie jest złym pomysłem, ale w tym przypadku nie ma to znaczenia. Nie można zmienić wartości stałej.
  • Stała statyczna jest używana z nazwy klasy Item, a nie z obiektu Item.

Stałe statyczne można zobaczyć w całym interfejsie API Java. Na przykład klasa opakowania liczb całkowitych ma dwie, które przechowują wartości maksymalne i minimalne, int