Zmienna statyczna w Java

Statyka może być:

  1. Zmienne statyczne
  2. Metody statyczne
  3. Statyczne bloki kodu.

Przyjrzyjmy się najpierw zmiennym statycznym i metodom statycznym.

Czym jest zmienna statyczna Java?

Zmienna statyczna w Java jest zmienną należącą do klasy i inicjowaną tylko raz na początku wykonania. Jest to zmienna należąca do klasy, a nie do obiektu (instancja). Zmienne statyczne są inicjowane tylko raz, na początku wykonywania. Zmienne te zostaną zainicjowane jako pierwsze, przed inicjalizacją jakichkolwiek zmiennych instancji.

  • Pojedyncza kopia, która ma być współdzielona przez wszystkie instancje klasy
  • Dostęp do zmiennej statycznej można uzyskać bezpośrednio poprzez nazwę klasy i nie wymaga ona żadnego obiektu

Składnia:

<class-name>.<variable-name>

Na czym polega metoda statyczna Java?

Metoda statyczna w Java jest metodą należącą do klasy, a nie do obiektu. Metoda statyczna może uzyskać dostęp tylko do danych statycznych. Jest to metoda należąca do klasy, a nie do obiektu (instancji). Metoda statyczna może uzyskać dostęp tylko do danych statycznych. Nie może uzyskać dostępu do danych niestatycznych (zmienne instancji).

  • Metoda statyczna może wywoływać tylko inne metody statyczne i nie może wywoływać z niej metody niestatycznej.
  • Dostęp do metody statycznej można uzyskać bezpośrednio poprzez nazwę klasy i nie wymaga ona żadnego obiektu
  • Metoda statyczna nie może w żaden sposób odwoływać się do słów kluczowych „this” ani „super”.

Składnia:

<class-name>.<method-name>

Uwaga: main jest statyczna, ponieważ musi być dostępna, aby aplikacja mogła działać, zanim nastąpi jakakolwiek instancja.

Poznajmy niuanse statycznych słów kluczowych, wykonując kilka ćwiczeń!

Przykład: Jak wywołać zmienne i metody statyczne

Krok 1) Skopiuj poniższy kod do edytora

public class Demo{
   public static void main(String args[]){
     Student s1 = new Student();
     s1.showData();
     Student s2 = new Student();
     s2.showData();
     //Student.b++;
     //s1.showData();
  }
}

class Student {
int a; //initialized to zero
static int b; //initialized to zero only when class is loaded not for each object created.

  Student(){
   //Constructor incrementing static variable b
   b++;
  }

   public void showData(){
      System.out.println("Value of a = "+a);
      System.out.println("Value of b = "+b);
   }
//public static void increment(){
//a++;
//}

}

Krok 2) Zapisz i skompiluj kod. Uruchom kod jako Demo Javy.

Krok 3) Oczekiwane wyniki pokazano poniżej


Java Metody statyczne i zmienne

Poniższy diagram pokazuje, w jaki sposób tworzone są zmienne referencyjne i obiekty oraz w jaki sposób różne instancje uzyskują dostęp do zmiennych statycznych.


Java Metody statyczne i zmienne

Krok 4) Dostęp do zmiennej statycznej można uzyskać spoza klasy za pomocą składni NazwaKlasy.Nazwa_zmiennej. Odkomentuj linię nr 7 i 8. Zapisz, skompiluj i uruchom. Obserwuj wynik.

Value of a = 0
Value of b = 1
Value of a = 0
Value of b = 2
Value of a = 0
Value of b = 3

Krok 5) Odkomentuj wiersze 25,26 i 27 . Zapisz, skompiluj i uruchom.

	 error: non-static variable a cannot be referenced from a static context a++; 

Krok 6) Błąd =? Dzieje się tak, ponieważ nie można uzyskać dostępu do zmiennej instancji „a” z metody klasy statycznej Java „przyrost".

W czym jest blok statyczny Java?

blok statyczny jest blokiem instrukcji wewnątrz a Java klasa, która zostanie wykonana, gdy klasa zostanie po raz pierwszy załadowana do FMV, ZA blok statyczny pomaga inicjować statyczne elementy danych, podobnie jak konstruktory pomagają inicjować elementy instancji.

class Test{
 static {
 //Code goes here
 }
}

Poniższy program jest przykładem statycznego bloku Java.

Przykład: Jak uzyskać dostęp do bloku statycznego

public class Demo {
 static int a;
 static int b;
 static {
    a = 10;
    b = 20;
 }
 public static void main(String args[]) {

  System.out.println("Value of a = " + a);
  System.out.println("Value of b = " + b);

 	}
}

otrzymasz następujący wynik programu.

Value of a = 10
Value of b = 20