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

Podsumuj ten post nastฤ™pujฤ…co: