The statické kľúčové slovo v Jave sa používa hlavne na správu pamäte. Kľúčové slovo statické v jazyku Java sa používa na zdieľanie rovnakej premennej alebo metódy danej triedy. Používatelia môžu použiť statické kľúčové slová s premennými, metódami, blokmi a vnorenými triedami. Statické kľúčové slovo patrí do triedy ako inštancia triedy. Kľúčové slovo statické sa používa pre konštantnú premennú alebo metódu, ktorá je rovnaká pre každú inštanciu triedy.
The statické kľúčové slovo je neprístupový modifikátor v jazyku Java, ktorý je použiteľný pre nasledovné:
- Bloky
- Premenné
- Metódy
- triedy
Poznámka: Ak chcete vytvoriť statický člen (blok, premenná, metóda, vnorená trieda), pred jeho deklaráciu uveďte kľúčové slovo statické .
Charakteristika statického kľúčového slova:
Tu sú niektoré charakteristiky statického kľúčového slova v jazyku Java:
národnosť peta davidsona
- Alokácia zdieľanej pamäte: Statické premenné a metódy majú pridelený pamäťový priestor iba raz počas vykonávania programu. Tento pamäťový priestor je zdieľaný medzi všetkými inštanciami triedy, čo robí statických členov užitočnými na udržiavanie globálneho stavu alebo zdieľanej funkčnosti. Prístupné bez inštancie objektu: K statickým členom je možné pristupovať bez potreby vytvárať inštanciu triedy. Vďaka tomu sú užitočné na poskytovanie pomocných funkcií a konštánt, ktoré možno použiť v celom programe. Priradené k triede, nie k objektom: Statické členy sú priradené k triede, nie k jednotlivým objektom. To znamená, že zmeny statického člena sa prejavia vo všetkých inštanciách triedy a že k statickým členom môžete pristupovať pomocou názvu triedy a nie odkazu na objekt. Nemajú prístup k nestatickým členom: Statické metódy a premenné nemajú prístup k nestatickým členom triedy, pretože nie sú priradené k žiadnej konkrétnej inštancii triedy. Môžu byť preťažené, ale nie prepísané : Statické metódy môžu byť preťažené, čo znamená, že môžete definovať viacero metód s rovnakým názvom, ale rôznymi parametrami. Nemožno ich však prepísať, pretože sú spojené skôr s triedou než s konkrétnou inštanciou triedy.
Keď je člen vyhlásený za statický, je možné k nemu pristupovať pred vytvorením akýchkoľvek objektov jeho triedy a bez odkazu na akýkoľvek objekt. Napríklad v nižšie uvedenom programe Java pristupujeme k statickej metóde m1() bez vytvorenia akéhokoľvek predmetu Test trieda.
Java
// 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();> >}> }> |
>
>Výkon
from m1>
Statické bloky
Ak potrebujete vykonať výpočet, aby ste mohli inicializovať svoj statické premenné , môžete deklarovať statický blok, ktorý sa vykoná presne raz, keď sa trieda prvýkrát načíta.
Zvážte nasledujúci java program demonštrujúci použitie statických blokov.
Java
// 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);> >}> }> |
>
>Výkon
Static block initialized. from main Value of a : 10 Value of b : 40>
Podrobný článok o statických blokoch nájdete v téme statické bloky
Statické premenné
Keď je premenná deklarovaná ako statická, potom sa vytvorí jedna kópia premennej a zdieľa sa medzi všetkými objektmi na úrovni triedy. Statické premenné sú v podstate globálne premenné. Všetky inštancie triedy zdieľajú rovnakú statickú premennú.
Dôležité body pre statické premenné:
- Statické premenné môžeme vytvárať len na úrovni triedy. Pozri tu
- statický blok a statické premenné sa vykonávajú v poradí, v akom sa nachádzajú v programe.
Nižšie je uvedený program Java, ktorý demonštruje, že statický blok a statické premenné sa vykonávajú v poradí, v akom sa nachádzajú v programe.
Java
// 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'>);> >}> }> |
>
>Výkon
from m1 Inside static block Value of a : 20 from main>
Statické metódy
Keď je metóda deklarovaná s statické kľúčové slovo, je známe ako statická metóda. Najbežnejším príkladom statickej metódy je Hlavná( ) metóda. Ako je uvedené vyššie, ku každému statickému členovi je možné pristupovať pred vytvorením akéhokoľvek objektu jeho triedy a bez odkazu na akýkoľvek objekt. Metódy deklarované ako statické majú niekoľko obmedzení:
- Môžu iba priamo volať iné statické metódy.
- Majú priamy prístup iba k statickým údajom.
- Nemôžu sa odvolávať toto alebo Super akýmkoľvek spôsobom.
Nižšie je uvedený java program, ktorý demonštruje obmedzenia na statické metódy.
Java
// 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> >}> }> |
>
>
Výkon:
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>
Kedy použiť statické premenné a metódy?
Použite statickú premennú pre vlastnosť, ktorá je spoločná pre všetky objekty. Napríklad v triede Študent majú všetci študenti rovnaký názov vysokej školy. Na zmenu statických premenných použite statické metódy.
Zvážte nasledujúci java program, ktorý ilustruje použitie statické kľúčové slová s premennými a metódami.
Java
čítanie zo súboru csv v jazyku Java
// 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();> >}> }> |
>
>Výkon
name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>

Statické triedy
Je možné vytvoriť triedu statické iba ak ide o vnorenú triedu. Nemôžeme deklarovať triedu najvyššej úrovne so statickým modifikátorom, ale môžeme deklarovať vnorené triedy ako statické. Takéto typy tried sa nazývajú vnorené statické triedy. Vnorená statická trieda nepotrebuje odkaz na vonkajšiu triedu. V tomto prípade statická trieda nemôže získať prístup k nestatickým členom triedy Outer.
Poznámka: Pre statickú vnorenú triedu pozri a statická vnorená trieda v jazyku Java
Implementácia:
Java
// 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();> >}> }> |
>
>Výkon
techcodeview.com>
Tu je príklad programu Java, ktorý demonštruje použitie statického kľúčového slova:
Java
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();> >}> }> |
>
>Výkon
Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>
Výhody:
- Efektivita pamäte : Statickým členom je pridelená pamäť iba raz počas vykonávania programu, čo môže viesť k významnej úspore pamäte pre veľké programy. Vylepšený výkon: Pretože statické členy sú spojené s triedou a nie s jednotlivými inštanciami, je možné k nim pristupovať rýchlejšie a efektívnejšie ako k nestatickým členom. Globálna dostupnosť: K statickým členom je možné pristupovať odkiaľkoľvek v programe, bez ohľadu na to, či bola vytvorená inštancia triedy. Zapuzdrenie pomocných metód: Statické metódy možno použiť na zapuzdrenie pomocných funkcií, ktoré nevyžadujú od objektu žiadne informácie o stave. To môže zlepšiť organizáciu kódu a uľahčiť opätovné použitie pomocných funkcií vo viacerých triedach. Konštanty: Statické konečné premenné možno použiť na definovanie konštánt, ktoré sú zdieľané v rámci celého programu. Funkčnosť na úrovni triedy: Statické metódy možno použiť na definovanie funkčnosti na úrovni triedy, ktorá nevyžaduje žiadne informácie o stave objektu, ako sú výrobné metódy alebo pomocné funkcie.
Celkovo je statické kľúčové slovo mocným nástrojom, ktorý môže pomôcť zlepšiť efektivitu a organizáciu vašich programov Java.