Jak działają pola statyczne w Javie

Może się zdarzyć, że warto mieć wartości wspólne dla wszystkich instancji konkretnej klasy. Pola statyczne i stałe statyczne włącz ten typ udostępniania, należąc do klasa a nie do rzeczywistych obiektów.

Modyfikator statyczny

Zwykle pól i metod zdefiniowanych w klasie można używać tylko wtedy, gdy utworzono obiekt tego typu klasy. Rozważmy na przykład prostą klasę przedmiotów, która śledzi towary w sklepie:

 przedmiot klasy publicznej {

 private String itemName;


 Element publiczny (String itemName)

 {

 this.itemName = itemName;

 }


 public String getItemName ()

 {

 return itemName;

 }

 } 

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

 StaticExample klasy publicznej {


 public static void main (String [] args) {

 Przedmiot catFood = nowy przedmiot („Whiskas”);

 System.out.println (catFood.getItemName ());

 }

 } 

Jeśli jednak modyfikator statyczny jest zawarty w deklaracji pola lub metody, żadna instancja klasy nie jest wymagane w celu użycia pola lub metody - są powiązane z klasą, a nie z konkretną osobą obiekt. Jeśli spojrzysz na powyższy przykład, zobaczysz, że modyfikator statyczny jest już używany w pliku

instagram viewer
główna deklaracja metody:

 publiczny statyczny void main (String [] args) { 

The główna metoda jest metoda statyczna który nie wymaga istnienia obiektu przed jego wywołaniem. Ponieważ main () jest punktem wyjścia dla dowolnej aplikacji Java, w rzeczywistości nie ma już obiektów, które mogłyby ją wywołać. Możesz, jeśli masz ochotę mieć program, który stale się wywołuje, wykonaj następujące czynności:

 StaticExample klasy publicznej {


 public static void main (String [] args) {


 String [] s = {„random”, „string”};

 StaticExample.main (s);

 }

 }


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ż znane jako pola klas. Są to po prostu pola, które mają modyfikatory statyczne w swoich deklaracjach. Na przykład wróćmy do klasy Item i dodajmy pole statyczne:

 przedmiot klasy publicznej {


 // pole statyczne unikalne

 private static int uniqueId = 1;


 private int itemId;

 private String itemName;


 Element publiczny (String itemName)

 {

 this.itemName = itemName;

 itemId = uniqueId;

 UniqueId ++;

 }

 }


Pola itemId i itemName są normalnymi polami niestatycznymi. Po utworzeniu instancji klasy Item pola te będą miały wartości przechowywane w tym obiekcie. Jeśli zostanie utworzony inny obiekt Item, również będzie miał pola itemId i itemName do przechowywania wartości.

Jednak pole statyczne UniqueId zawiera wartość, która będzie taka sama dla wszystkich obiektów 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 niepowtarzalny identyfikator służy do nadania każdemu obiektowi elementu niepowtarzalnego numeru. Jest to łatwe, jeśli każdy utworzony obiekt Item pobierze bieżącą wartość w polu statycznym UniqueId, a następnie zwiększy ją o jeden. Zastosowanie pola statycznego oznacza, że ​​każdy obiekt nie musi wiedzieć o innych obiektach, aby uzyskać unikalny identyfikator. Może to być przydatne, jeśli chcesz poznać kolejność, w której obiekty przedmiotów zostały utworzone.

Co to jest stała statyczna?

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

 przedmiot klasy publicznej {


 prywatny statyczny int id = 1;

 public static final int maxItemNameLength = 20;


 private int itemId;

 private String itemName;


 Element publiczny (String itemName) 

 {

 if (itemName.length ()> maxItemNameLength)

 {

 this.itemName = itemName.substring (0,20);

 }

 jeszcze

 {

 this.itemName = itemName;

 }

 itemId = id;

 id ++;

 } } 

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

 StaticExample klasy publicznej {


 public static void main (String [] args) {


 Przedmiot catFood = nowy przedmiot („Whiskas”);

 System.out.println (catFood.getItemName ());

 System.out.println (Item.maxItemNameLength);

 }

 }


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

  • Jest zadeklarowany jako pole publiczne. Ogólnie rzecz biorąc, złym pomysłem jest upublicznienie pola w dowolnej klasie, którą projektujesz, ale w tym przypadku nie ma to znaczenia. Wartości stałej nie można zmienić.
  • Stała statyczna jest używana z nazwy klasy Item, a nie obiektu Item.

Stałe statyczne można zobaczyć w interfejsie API Java. Na przykład całkowita klasa opakowująca ma dwa, które przechowują maksymalne i minimalne wartości int typ danych może mieć:

 System.out.println („Maksymalna wartość dla int to:” + liczba całkowita. MAKSYMALNA WARTOŚĆ);

 System.out.println („Minimalna wartość dla int to:” + liczba całkowita. MIN_VALUE);


 Wynik:

 Maksymalna wartość dla int to: 2147483647

 Minimalna wartość dla int to: -2147483648


instagram story viewer