The statična ključna beseda v Javi se uporablja predvsem za upravljanje pomnilnika. Statična ključna beseda v Javi se uporablja za skupno rabo iste spremenljivke ali metode danega razreda. Uporabniki lahko uporabijo statične ključne besede s spremenljivkami, metodami, bloki in ugnezdenimi razredi. Statična ključna beseda pripada razredu kot primerek razreda. Ključna beseda static se uporablja za konstantno spremenljivko ali metodo, ki je enaka za vse primerke razreda.
The statična ključna beseda je modifikator nedostopa v Javi, ki se uporablja za naslednje:
- Bloki
- Spremenljivke
- Metode
- Razredi
Opomba: Če želite ustvariti statičnega člana (blok, spremenljivko, metodo, ugnezdeni razred), pred njegovo deklaracijo navedite ključno besedo statična .
Značilnosti statične ključne besede:
Tukaj je nekaj značilnosti statične ključne besede v Javi:
- Dodelitev skupnega pomnilnika : Statičnim spremenljivkam in metodam se pomnilniški prostor dodeli samo enkrat med izvajanjem programa. Ta pomnilniški prostor si delijo vse instance razreda, zaradi česar so statični člani uporabni za vzdrževanje globalnega stanja ali skupne funkcionalnosti. Dostopno brez instanciranja objekta: Do statičnih članov je mogoče dostopati, ne da bi bilo treba ustvariti primerek razreda. Zaradi tega so uporabni za zagotavljanje funkcij in konstant, ki jih je mogoče uporabiti v celotnem programu. Povezan z razredom, ne s predmeti: statični člani so povezani z razredom, ne s posameznimi objekti. To pomeni, da se spremembe statičnega člana odražajo v vseh primerkih razreda in da lahko dostopate do statičnih članov z uporabo imena razreda in ne reference objekta. Ni mogoče dostopati do nestatičnih članov: statične metode in spremenljivke ne morejo dostopati do nestatičnih članov razreda, ker niso povezani z nobenim določenim primerkom razreda. Lahko se preobremeni, vendar ne preglasi : statične metode je mogoče preobremeniti, kar pomeni, da lahko definirate več metod z istim imenom, vendar z različnimi parametri. Vendar jih ni mogoče preglasiti, saj so povezani z razredom in ne z določenim primerkom razreda.
Ko je član razglašen za statičnega, je do njega mogoče dostopati, preden so ustvarjeni kateri koli objekti njegovega razreda, in brez sklicevanja na kateri koli objekt. Na primer, v spodnjem programu java dostopamo do statične metode m1() brez ustvarjanja katerega koli predmeta Test razred.
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();> > }> }> |
>
>Izhod
from m1>
Statični bloki
Če morate izvesti izračun za inicializacijo vašega statične spremenljivke , lahko deklarirate statični blok, ki se izvede točno enkrat, ko je razred prvič naložen.
Razmislite o naslednjem programu Java, ki prikazuje uporabo statičnih 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);> > }> }> |
>
>Izhod
Static block initialized. from main Value of a : 10 Value of b : 40>
Za podroben članek o statičnih blokih glejte statični bloki
Statične spremenljivke
Ko je spremenljivka deklarirana kot statična, se ustvari ena sama kopija spremenljivke, ki se deli z vsemi objekti na ravni razreda. Statične spremenljivke so v bistvu globalne spremenljivke. Vsi primerki razreda si delijo isto statično spremenljivko.
Pomembne točke za statične spremenljivke:
- Samo na ravni razreda lahko ustvarimo statične spremenljivke. Glej tukaj
- statični blok in statične spremenljivke se izvajajo v vrstnem redu, kot so prisotne v programu.
Spodaj je program Java, ki prikazuje, da se statični blok in statične spremenljivke izvajajo v vrstnem redu, kot so prisotni v programu.
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'> );> > }> }> |
>
>Izhod
from m1 Inside static block Value of a : 20 from main>
Statične metode
Ko je metoda deklarirana z statična ključno besedo, je znana kot statična metoda. Najpogostejši primer statične metode je glavni ( ) metoda. Kot je razloženo zgoraj, je mogoče dostopati do katerega koli statičnega člana, preden so ustvarjeni kateri koli objekti njegovega razreda, in brez sklicevanja na kateri koli objekt. Metode, deklarirane kot statične, imajo več omejitev:
- Lahko samo neposredno kličejo druge statične metode.
- Lahko samo neposredno dostopajo do statičnih podatkov.
- Ne morejo se sklicevati na to oz super kakorkoli.
Spodaj je program java za prikaz omejitev statičnih metod.
Java
css za prelom besedila
// 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> > }> }> |
>
>
Izhod:
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>
Kdaj uporabiti statične spremenljivke in metode?
Uporabite statično spremenljivko za lastnost, ki je skupna vsem objektom. Na primer, v razredu Študent si vsi študenti delijo isto ime fakultete. Uporabite statične metode za spreminjanje statičnih spremenljivk.
Razmislite o naslednjem programu java, ki ponazarja uporabo statična ključne besede s spremenljivkami in metodami.
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();> > }> }> |
>
>Izhod
name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>
Statični razredi
Lahko se naredi razred statična samo, če je ugnezdeni razred. Razreda najvišje ravni ne moremo deklarirati s statičnim modifikatorjem, lahko pa ugnezdene razrede deklariramo kot statične. Takšni tipi razredov se imenujejo ugnezdeni statični razredi. Ugnezdeni statični razred ne potrebuje sklicevanja na zunanji razred. V tem primeru statični razred ne more dostopati do nestatičnih članov zunanjega razreda.
Opomba: Za statični ugnezdeni razred glejte a statični ugnezdeni razred v Javi
Izvedba:
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();> > }> }> |
>
>Izhod
techcodeview.com>
Tukaj je primer programa Java, ki prikazuje uporabo statične ključne besede:
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();> > }> }> |
>
>Izhod
Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>
Prednosti:
- Učinkovitost pomnilnika : Statičnim članom se pomnilnik dodeli le enkrat med izvajanjem programa, kar lahko povzroči znatne prihranke pomnilnika za velike programe. Izboljšana zmogljivost: ker so statični člani povezani z razredom in ne s posameznimi primerki, je do njih mogoče dostopati hitreje in učinkoviteje kot do nestatičnih članov. Globalna dostopnost: do statičnih članov je mogoče dostopati od koder koli v programu, ne glede na to, ali je bil ustvarjen primerek razreda. Enkapsulacija pomožnih metod: statične metode je mogoče uporabiti za enkapsulacijo pomožnih funkcij, ki ne zahtevajo nobenih informacij o stanju objekta. To lahko izboljša organizacijo kode in olajša ponovno uporabo pomožnih funkcij v več razredih. Konstante: statične končne spremenljivke lahko uporabite za definiranje konstant, ki so v skupni rabi v celotnem programu. Funkcionalnost na ravni razreda: statične metode je mogoče uporabiti za definiranje funkcionalnosti na ravni razreda, ki ne zahteva nobenih informacij o stanju objekta, kot so tovarniške metode ali pomožne funkcije.
Na splošno je statična ključna beseda močno orodje, ki lahko pomaga izboljšati učinkovitost in organizacijo vaših programov Java.