Statyczne słowo kluczowe Java (z przykładami)

W tym samouczku dowiemy się o słowie kluczowym static w języku Java oraz metodach statycznych, zmiennych statycznych i blokach statycznych za pomocą przykładów.

Co to jest statyczne słowo kluczowe w Javie?

W Javie, jeśli chcemy uzyskać dostęp do członków klasy, musimy najpierw utworzyć instancję klasy. Ale będą sytuacje, w których będziemy chcieli uzyskać dostęp do członków klasy bez tworzenia żadnych zmiennych.

W takich sytuacjach możemy użyć staticsłowa kluczowego w Javie. Jeśli chcemy uzyskać dostęp do członków klasy bez tworzenia instancji klasy, musimy zadeklarować elementy członkowskie jako statyczne.

MathKlasa w Javie ma prawie wszystkie jego elementy statyczne. Tak więc możemy uzyskać dostęp do jego elementów członkowskich bez tworzenia instancji klasy Math. Na przykład,

 public class Main ( public static void main( String() args ) ( // accessing the methods of the Math class System.out.println("Absolute value of -12 = " + Math.abs(-12)); System.out.println("Value of PI = " + Math.PI); System.out.println("Value of E = " + Math.E); System.out.println("2^2 = " + Math.pow(2,2)); ) )

Wyjście :

 Wartość bezwzględna -12 = 12 Wartość PI = 3,141592653589793 Wartość E = 2,718281828459045 2 2 = 4,0

W powyższym przykładzie nie utworzyliśmy żadnych instancji Mathklasy. Ale jesteśmy w stanie uzyskać dostęp do jego metod: abs()i pow()i zmiennych: PIi E.

Jest to możliwe, ponieważ metody i zmienne Mathklasy są statyczne.

Metody statyczne

Metody statyczne są również nazywane metodami klasowymi. Dzieje się tak, ponieważ metoda statyczna należy do klasy, a nie do obiektu klasy.

Możemy też wywoływać metody statyczne bezpośrednio, używając nazwy klasy. Na przykład,

 class Test ( // static method inside the Test class public static void method() (… ) ) class Main ( // invoking the static method Test.method(); )

Tutaj widzimy, że metoda statyczna jest dostępna bezpośrednio z innych klas przy użyciu nazwy klasy.

W każdym programie Java zadeklarowaliśmy mainmetodę static. Dzieje się tak, ponieważ w celu uruchomienia programu maszyna JVM powinna mieć możliwość wywołania metody głównej w początkowej fazie, gdy w pamięci nie ma żadnych obiektów.

Przykład 1: metody statyczne i niestatyczne w języku Java

 class StaticTest ( // non-static method int multiply(int a, int b)( return a * b; ) // static method static int add(int a, int b)( return a + b; ) ) public class Main ( public static void main( String() args ) ( // create an instance of the StaticTest class StaticTest st = new StaticTest(); // call the nonstatic method System.out.println(" 2 * 2 = " + st.multiply(2,2)); // call the static method System.out.println(" 2 + 3 = " + StaticTest.add(2,3)); ) )

Wyjście :

 2 * 2 = 4 2 + 3 = 5

W powyższym programie zadeklarowaliśmy niestatyczną metodę o nazwie multiply()oraz metodę statyczną o nazwie add()wewnątrz klasy StaticTest.

Wewnątrz klasy Main widzimy, że wywołujemy metodę niestatyczną za pomocą obiektu klasy ( st.multiply(2, 2)). Jednak wywołujemy metodę statyczną przy użyciu nazwy klasy ( StaticTest.add(2, 3)).

Zmienne statyczne

W Javie, kiedy tworzymy obiekty klasy, każdy obiekt będzie miał własną kopię wszystkich zmiennych tej klasy. Na przykład,

 class Test ( // regular variable int age; ) class Main ( // create instances of Test Test test1 = new Test(); Test test2 = new Test(); )

Tutaj oba obiekty test1 i test2 będą miały oddzielne kopie zmiennej age. I różnią się od siebie.

Jeśli jednak zadeklarujemy zmienną jako statyczną, wszystkie obiekty tej klasy mają tę samą zmienną statyczną. Dzieje się tak, ponieważ podobnie jak metody statyczne, zmienne statyczne są również powiązane z klasą. I nie musimy tworzyć obiektów tej klasy, aby uzyskać dostęp do zmiennych statycznych. Na przykład,

 class Test ( // static variable static int age; ) class Main ( // access the static variable Test.age = 20; )

Tutaj widzimy, że uzyskujemy dostęp do zmiennej statycznej z innej klasy przy użyciu nazwy klasy.

Przykład 2: zmienne statyczne i niestatyczne Java

 class Test ( // static variable static int max = 10; // non-static variable int min = 5; ) public class Main ( public static void main(String() args) ( Test obj = new Test(); // access the non-static variable System.out.println("min + 1 = " + (obj.min + 1)); // access the static variable System.out.println("max + 1 = " + (Test.max + 1)); ) )

Wyjście :

 min + 1 = 6 max + 1 = 11

W powyższym programie zadeklarowaliśmy zmienną niestatyczną o nazwie min oraz zmienną statyczną o nazwie max wewnątrz klasy Test.

Wewnątrz klasy Main widzimy, że wywołujemy zmienną niestatyczną za pomocą obiektu klasy ( obj.min + 1). Jednak wywołujemy zmienną statyczną za pomocą nazwy klasy ( Test.max + 1).

Uwaga : zmienne statyczne są rzadko używane w Javie. Zamiast tego używane są stałe statyczne. Te stałe statyczne są definiowane przez static finalsłowo kluczowe i przedstawiane wielkimi literami. Dlatego niektórzy ludzie wolą używać wielkich liter również dla zmiennych statycznych.

Uzyskaj dostęp do zmiennych statycznych i metod w klasie

Uzyskujemy dostęp do zmiennej statycznej z innej klasy. Dlatego użyliśmy nazwy klasy, aby uzyskać do niej dostęp. Jeśli jednak chcemy uzyskać dostęp do statycznego elementu członkowskiego z wnętrza klasy, można uzyskać do niego bezpośredni dostęp. Na przykład,

 public class Main ( // static variable static int age; // static method static void display() ( System.out.println("Static Method"); ) public static void main(String() args) ( // access the static variable age = 30; System.out.println("Age is " + age); // access the static method display(); ) )

Wyjście :

 Wiek 30 lat Metoda statyczna

Tutaj możemy uzyskać bezpośredni dostęp do zmiennej statycznej i metody bez używania nazwy klasy. Dzieje się tak, ponieważ statyczne zmienne i metody są domyślnie publiczne. A ponieważ uzyskujemy dostęp z tej samej klasy, nie musimy określać nazwy klasy.

Bloki statyczne

W Javie do inicjalizacji zmiennych statycznych używane są bloki statyczne. Na przykład,

 class Test ( // static variable static int age; // static block static ( age = 23; ) )

Tutaj widzimy, że użyliśmy statycznego bloku o składni:

 static ( // variable initialization )

The static block is executed only once when the class is loaded in memory. The class is loaded if either the object of the class is requested in code or the static members are requested in code.

A class can have multiple static blocks and each static block is executed in the same sequence in which they have been written in a program.

Example 3: Use of static block in java

 class Main ( // static variables static int a = 23; static int b; static int max; // static blocks static ( System.out.println("First Static block."); b = a * 4; ) static ( System.out.println("Second Static block."); max = 30; ) // static method static void display() ( System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("max = " + max); ) public static void main(String args()) ( // calling the static method display(); ) )

Output:

 First Static block. Second Static block. a = 23 b = 92 max = 30

In the above program. as soon as the Main class is loaded,

  • The value of a is set to 23.
  • The first static block is executed. Hence, the string First Static block is printed and the value of b is set to a * 4.
  • The second static block is executed. Hence, the string Second Static block is printed and the value of max is set to 30.
  • Na koniec display()wykonywane są instrukcje print wewnątrz metody .

Zagnieżdżona klasa statyczna

W Javie możemy zadeklarować klasę wewnątrz innej klasy. Takie klasy są znane jako klasy zagnieżdżone. Zagnieżdżone klasy są dwojakiego rodzaju:

  • Statyczne klasy zagnieżdżone
  • Niestatyczne klasy zagnieżdżone

Na przykład,

 class OuterClass ( // static nested class static class NestedClass (… ) // non-static nested class class InnerClass (… ) )

Aby dowiedzieć się więcej, odwiedź zagnieżdżoną klasę Java.

Interesujące artykuły...