The statyczne słowo kluczowe w Javie służy głównie do zarządzania pamięcią. Słowo kluczowe static w Javie służy do udostępniania tej samej zmiennej lub metody danej klasy. Użytkownicy mogą stosować statyczne słowa kluczowe ze zmiennymi, metodami, blokami i klasami zagnieżdżonymi. Słowo kluczowe static należy do klasy niż instancja klasy. Słowo kluczowe static jest używane dla stałej zmiennej lub metody, która jest taka sama dla każdej instancji klasy.
The statyczny słowo kluczowe to modyfikator braku dostępu w Javie, który ma zastosowanie w następujących przypadkach:
- Bloki
- Zmienne
- Metody
- Zajęcia
Notatka: Aby utworzyć element statyczny (blok, zmienną, metodę, klasę zagnieżdżoną), poprzedź jego deklarację słowem kluczowym statyczny .
Charakterystyka statycznego słowa kluczowego:
Oto niektóre cechy słowa kluczowego static w Javie:
- Alokacja pamięci współdzielonej: Zmienne statyczne i metody przydzielają przestrzeń pamięci tylko raz podczas wykonywania programu. Ta przestrzeń pamięci jest współdzielona pomiędzy wszystkimi instancjami klasy, co sprawia, że statyczne elementy członkowskie są przydatne do utrzymywania stanu globalnego lub współdzielonej funkcjonalności. Dostępne bez tworzenia instancji obiektu: dostęp do elementów statycznych można uzyskać bez konieczności tworzenia instancji klasy. Dzięki temu są przydatne do udostępniania funkcji użytkowych i stałych, których można używać w całym programie. Powiązane z klasą, a nie z obiektami: Elementy statyczne są powiązane z klasą, a nie z pojedynczymi obiektami. Oznacza to, że zmiany wprowadzone w elemencie statycznym są odzwierciedlane we wszystkich instancjach klasy i że dostęp do elementów statycznych można uzyskać za pomocą nazwy klasy, a nie odniesienia do obiektu. Nie można uzyskać dostępu do niestatycznych elementów: Metody i zmienne statyczne nie mogą uzyskać dostępu do niestatycznych elementów klasy, ponieważ nie są one powiązane z żadną konkretną instancją klasy. Można przeciążać, ale nie można go zastąpić: Metody statyczne można przeciążać, co oznacza, że można zdefiniować wiele metod o tej samej nazwie, ale różnych parametrach. Nie można ich jednak zastąpić, ponieważ są powiązane z klasą, a nie z konkretną instancją klasy.
Gdy element członkowski jest zadeklarowany jako statyczny, można uzyskać do niego dostęp przed utworzeniem jakichkolwiek obiektów jego klasy i bez odniesienia do żadnego obiektu. Na przykład w poniższym programie Java uzyskujemy dostęp do metody statycznej m1() bez tworzenia żadnego obiektu Test klasa.
Jawa
// Java program to demonstrate that a static member> // can be accessed before instantiating a class> class> Test> {> > // static method> > static> void> m1()> > {> > System.out.println(> 'from m1'> );> > }> > public> static> void> main(String[] args)> > {> > // calling m1 without creating> > // any object of class Test> > m1();> > }> }> |
>
>Wyjście
from m1>
Bloki statyczne
Jeśli musisz wykonać obliczenia w celu zainicjowania pliku zmienne statyczne , możesz zadeklarować blok statyczny, który zostanie wykonany dokładnie raz, przy pierwszym załadowaniu klasy.
Rozważmy następujący program Java demonstrujący użycie bloków statycznych.
Jawa
// Java program to demonstrate use of static blocks> class> Test> {> > // static variable> > static> int> a => 10> ;> > static> int> b;> > > // static block> > static> {> > System.out.println(> 'Static block initialized.'> );> > b = a *> 4> ;> > }> > public> static> void> main(String[] args)> > {> > System.out.println(> 'from main'> );> > System.out.println(> 'Value of a : '> +a);> > System.out.println(> 'Value of b : '> +b);> > }> }> |
>
>Wyjście
Static block initialized. from main Value of a : 10 Value of b : 40>
Aby zapoznać się ze szczegółowym artykułem na temat bloków statycznych, zobacz bloki statyczne
Zmienne statyczne
Kiedy zmienna jest zadeklarowana jako statyczna, tworzona jest pojedyncza kopia zmiennej, która jest udostępniana wszystkim obiektom na poziomie klasy. Zmienne statyczne są zasadniczo zmiennymi globalnymi. Wszystkie instancje klasy mają tę samą zmienną statyczną.
Ważne punkty dotyczące zmiennych statycznych:
- Zmienne statyczne możemy tworzyć tylko na poziomie klasy. Spójrz tutaj
- blok statyczny i zmienne statyczne są wykonywane w kolejności, w jakiej występują w programie.
Poniżej znajduje się program w języku Java pokazujący, że bloki statyczne i zmienne statyczne są wykonywane w kolejności, w jakiej występują w programie.
Jawa
// Java program to demonstrate execution> // of static blocks and variables> class> Test> {> > // static variable> > static> int> a = m1();> > > // static block> > static> {> > System.out.println(> 'Inside static block'> );> > }> > > // static method> > static> int> m1() {> > System.out.println(> 'from m1'> );> > return> 20> ;> > }> > > // static method(main !!)> > public> static> void> main(String[] args)> > {> > System.out.println(> 'Value of a : '> +a);> > System.out.println(> 'from main'> );> > }> }> |
>
>Wyjście
vlc pobieraj filmy z YouTube'a
from m1 Inside static block Value of a : 20 from main>
Metody statyczne
Kiedy metoda jest zadeklarowana za pomocą statyczny słowem kluczowym, nazywa się to metodą statyczną. Najczęstszym przykładem metody statycznej jest główny( ) metoda. Jak omówiono powyżej, dostęp do dowolnego elementu statycznego można uzyskać przed utworzeniem jakichkolwiek obiektów jego klasy i bez odniesienia do żadnego obiektu. Metody zadeklarowane jako statyczne mają kilka ograniczeń:
- Mogą tylko bezpośrednio wywoływać inne metody statyczne.
- Mają bezpośredni dostęp tylko do danych statycznych.
- Nie mogą się do tego odnieść Ten Lub Super w jakikolwiek sposób.
Poniżej znajduje się program Java demonstrujący ograniczenia metod statycznych.
Jawa
// Java program to demonstrate restriction on static methods> class> Test> {> > // static variable> > static> int> a => 10> ;> > > // instance variable> > int> b => 20> ;> > > // static method> > static> void> m1()> > {> > a => 20> ;> > System.out.println(> 'from m1'> );> > > // Cannot make a static reference to the non-static field b> > b => 10> ;> // compilation error> > > // Cannot make a static reference to the> > // non-static method m2() from the type Test> > m2();> // compilation error> > > // Cannot use super in a static context> > System.out.println(> super> .a);> // compiler error> > }> > > // instance method> > void> m2()> > {> > System.out.println(> 'from m2'> );> > }> > > > > public> static> void> main(String[] args)> > {> > // main method> > }> }> |
>
data konwertowana na ciąg
>
Wyjście:
prog.java:18: error: non-static variable b cannot be referenced from a static context b = 10; // compilation error ^ prog.java:22: error: non-static method m2() cannot be referenced from a static context m2(); // compilation error ^ prog.java:25: error: non-static variable super cannot be referenced from a static context System.out.println(super.a); // compiler error ^ prog.java:25: error: cannot find symbol System.out.println(super.a); // compiler error ^ symbol: variable a 4 errors>
Kiedy używać zmiennych i metod statycznych?
Użyj zmiennej statycznej dla właściwości wspólnej dla wszystkich obiektów. Na przykład w klasie Student wszyscy uczniowie mają tę samą nazwę uczelni. Użyj metod statycznych do zmiany zmiennych statycznych.
Rozważmy następujący program Java, który ilustruje użycie statyczny słowa kluczowe ze zmiennymi i metodami.
Jawa
// A java program to demonstrate use of> // static keyword with methods and variables> // Student class> class> Student {> > String name;> > int> rollNo;> > // static variable> > static> String cllgName;> > // static counter to set unique roll no> > static> int> counter => 0> ;> > public> Student(String name)> > {> > this> .name = name;> > this> .rollNo = setRollNo();> > }> > // getting unique rollNo> > // through static variable(counter)> > static> int> setRollNo()> > {> > counter++;> > return> counter;> > }> > // static method> > static> void> setCllg(String name) { cllgName = name; }> > // instance method> > void> getStudentInfo()> > {> > System.out.println(> 'name : '> +> this> .name);> > System.out.println(> 'rollNo : '> +> this> .rollNo);> > // accessing static variable> > System.out.println(> 'cllgName : '> + cllgName);> > }> }> // Driver class> public> class> StaticDemo {> > public> static> void> main(String[] args)> > {> > // calling static method> > // without instantiating Student class> > Student.setCllg(> 'XYZ'> );> > Student s1 => new> Student(> 'Alice'> );> > Student s2 => new> Student(> 'Bob'> );> > s1.getStudentInfo();> > s2.getStudentInfo();> > }> }> |
>
>Wyjście
name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>
Klasy statyczne
Można zrobić klasę statyczny tylko jeśli jest to klasa zagnieżdżona. Nie możemy zadeklarować klasy najwyższego poziomu za pomocą modyfikatora static, ale możemy zadeklarować klasy zagnieżdżone jako statyczne. Tego typu klasy nazywane są zagnieżdżonymi klasami statycznymi. Zagnieżdżona klasa statyczna nie potrzebuje odniesienia do klasy Outer. W takim przypadku klasa statyczna nie może uzyskać dostępu do niestatycznych elementów klasy Outer.
Notatka: Informacje na temat statycznej klasy zagnieżdżonej można znaleźć w artykule a statyczna klasa zagnieżdżona w Javie
Realizacja:
Jawa
// A java program to demonstrate use> // of static keyword with Classes> import> java.io.*;> public> class> GFG {> > private> static> String str => 'techcodeview.com'> ;> > // Static class> > static> class> MyNestedClass {> > > // non-static method> > public> void> disp(){> > System.out.println(str);> > }> > }> > > public> static> void> main(String args[])> > {> > GFG.MyNestedClass obj> > => new> GFG.MyNestedClass();> > obj.disp();> > }> }> |
>
>Wyjście
techcodeview.com>
Oto przykładowy program Java demonstrujący użycie słowa kluczowego static:
Jawa
public> class> ExampleClass {> > public> static> int> count => 0> ;> > public> int> id;> > public> ExampleClass() {> > count++;> > id = count;> > }> > public> static> void> printCount() {> > System.out.println(> 'Number of instances: '> + count);> > }> > public> void> printId() {> > System.out.println(> 'Instance ID: '> + id);> > }> > public> static> void> main(String[] args) {> > ExampleClass e1 => new> ExampleClass();> > ExampleClass e2 => new> ExampleClass();> > ExampleClass e3 => new> ExampleClass();> > e1.printId();> > e2.printId();> > e3.printId();> > ExampleClass.printCount();> > }> }> |
>
>Wyjście
Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>
Zalety:
- Wydajność pamięci: Statycznym elementom przydzielana jest pamięć tylko raz podczas wykonywania programu, co może skutkować znaczną oszczędnością pamięci w przypadku dużych programów. Poprawiona wydajność: ponieważ elementy statyczne są powiązane z klasą, a nie z pojedynczymi instancjami, można uzyskać do nich dostęp szybciej i wydajniej niż do elementów niestatycznych. Globalna dostępność: Dostęp do elementów statycznych można uzyskać z dowolnego miejsca w programie, niezależnie od tego, czy utworzono instancję klasy. Hermetyzacja metod narzędziowych: Metod statycznych można używać do hermetyzowania funkcji narzędziowych, które nie wymagają żadnych informacji o stanie obiektu. Może to poprawić organizację kodu i ułatwić ponowne użycie funkcji narzędziowych w wielu klasach. Stałe: Statyczne zmienne końcowe mogą służyć do definiowania stałych, które są wspólne dla całego programu. Funkcjonalność na poziomie klasy: Metody statyczne mogą służyć do definiowania funkcjonalności na poziomie klasy, która nie wymaga żadnych informacji o stanie obiektu, takich jak metody fabryczne lub funkcje pomocnicze.
Ogólnie rzecz biorąc, słowo kluczowe static to potężne narzędzie, które może pomóc w poprawie wydajności i organizacji programów Java.