Słowo kluczowe static służy do konstruowania metod, które będą istnieć niezależnie od tego, czy zostaną wygenerowane jakiekolwiek instancje klasy. Każda metoda korzystająca ze słowa kluczowego static nazywana jest metodą statyczną.
Cechy metody statycznej:
- Metoda statyczna w Javie to metoda będąca częścią klasy, a nie instancją tej klasy.
- Każda instancja klasy ma dostęp do metody.
- Metody statyczne mają dostęp do zmiennych klasy (zmiennych statycznych) bez użycia obiektu klasy (instancji).
- Za pomocą metody statycznej można uzyskać dostęp wyłącznie do danych statycznych. Nie ma dostępu do danych, które nie są statyczne (zmienne instancji).
- Zarówno w przypadku metod statycznych, jak i niestatycznych, można uzyskać bezpośredni dostęp do metod statycznych.
Składnia deklarująca metodę statyczną:
Access_modifier static void methodName() { // Method body. }> Nazwy klasy można używać do wywoływania metod statycznych lub uzyskiwania do nich dostępu.
Składnia wywoływania metody statycznej:
className.methodName();>
Przykład 1: Metoda statyczna nie ma dostępu do zmiennej instancji
JVM najpierw uruchamia metodę statyczną, a następnie tworzy instancje klas. Ponieważ żadne obiekty nie są dostępne, gdy używana jest metoda statyczna. Metoda statyczna nie ma dostępu do zmiennych instancji. W rezultacie metoda statyczna nie może uzyskać dostępu do zmiennej instancji klasy.
Jawa
// Java program to demonstrate that> // The static method does not have> // access to the instance variable> > import> java.io.*;> > public> class> GFG {> >// static variable> >static> int> a =>40>;> > >// instance variable> >int> b =>50>;> > >void> simpleDisplay()> >{> >System.out.println(a);> >System.out.println(b);> >}> > >// Declaration of a static method.> >static> void> staticDisplay()> >{> >System.out.println(a);> >}> > >// main method> >public> static> void> main(String[] args)> >{> >GFG obj =>new> GFG();> >obj.simpleDisplay();> > >// Calling static method.> >staticDisplay();> >}> }> |
>
>Wyjście
40 50 40>
Przykład 2: Zarówno w przypadku metod statycznych, jak i niestatycznych, uzyskuje się bezpośredni dostęp do metod statycznych.
Jawa
// Java program to demonstrate that> // In both static and non-static methods,> // static methods are directly accessed.> > import> java.io.*;> > public> class> StaticExample {> > >static> int> num =>100>;> >static> String str =>'GeeksForGeeks'>;> > >// This is Static method> >static> void> display()> >{> >System.out.println(>'static number is '> + num);> >System.out.println(>'static string is '> + str);> >}> > >// non-static method> >void> nonstatic()> >{> >// our static method can accessed> >// in non static method> >display();> >}> > >// main method> >public> static> void> main(String args[])> >{> >StaticExample obj =>new> StaticExample();> > >// This is object to call non static function> >obj.nonstatic();> > >// static method can called> >// directly without an object> >display();> >}> }> |
przykłady kodu w języku c#
>
>Wyjście
static number is 100 static string is GeeksForGeeks static number is 100 static string is GeeksForGeeks>
Dlaczego warto stosować metody statyczne?
- Aby uzyskać dostęp i zmienić zmienne statyczne oraz inne metody statyczne nieoparte na obiektach.
- Klasy użytkowe i pomocnicze często wykorzystują metody statyczne.
Ograniczenia metod statycznych:
- Niestatyczne elementy danych ani metody niestatyczne nie mogą być używane przez metody statyczne, a metody statyczne nie mogą bezpośrednio wywoływać metod niestatycznych.
- W środowisku statycznym nie można używać tego i super.
Dlaczego jest główną metodą w Javie statyczny?
Dzieje się tak dlatego, że obiekt nie wymaga wywoływania metody statycznej. Gdyby była to funkcja niestatyczna, JVM najpierw zbudowałby obiekt przed wywołaniem metody main(), co skutkowałoby dodatkowymi trudnościami w alokacji pamięci.
Różnica między metodą statyczną a metodą instancji
| Metody instancji | Metody statyczne |
|---|---|
| Wymaga obiektu klasy. | Nie wymaga obiektu klasy. |
| Może uzyskać dostęp do wszystkich atrybutów klasy. | Może uzyskać dostęp tylko do statycznego atrybutu klasy. |
| Dostęp do metod można uzyskać jedynie poprzez odwołanie do obiektu. | Dostęp do metody można uzyskać jedynie poprzez nazwę klasy. |
| Składnia: Objref.methodname() | Składnia: nazwaklasy.nazwametody() |
| Jest to przykład programowania z przekazywaniem wartości. | Jest to przykład programowania z przekazywaniem referencji. |