De statiskt nyckelord i Java används främst för minneshantering. Det statiska nyckelordet i Java används för att dela samma variabel eller metod för en given klass. Användarna kan tillämpa statiska nyckelord med variabler, metoder, block och kapslade klasser. Det statiska nyckelordet tillhör klassen än en instans av klassen. Det statiska nyckelordet används för en konstant variabel eller en metod som är densamma för varje instans av en klass.
De statisk nyckelord är en icke-åtkomstmodifierare i Java som är tillämplig för följande:
- Block
- Variabler
- Metoder
- Klasser
Notera: För att skapa en statisk medlem (block, variabel, metod, kapslad klass), föregå dess deklaration med nyckelordet statisk .
Egenskaper för statiskt sökord:
Här är några egenskaper hos det statiska nyckelordet i Java:
- Tilldelning av delat minne: Statiska variabler och metoder tilldelas minnesutrymme endast en gång under körningen av programmet. Detta minnesutrymme delas mellan alla instanser av klassen, vilket gör statiska medlemmar användbara för att upprätthålla global status eller delad funktionalitet. Tillgänglig utan objektinstansiering: Statiska medlemmar kan nås utan att behöva skapa en instans av klassen. Detta gör dem användbara för att tillhandahålla verktygsfunktioner och konstanter som kan användas i hela programmet. Associerade med klass, inte objekt: Statiska medlemmar är associerade med klassen, inte med enskilda objekt. Detta innebär att ändringar av en statisk medlem återspeglas i alla instanser av klassen, och att du kan komma åt statiska medlemmar med hjälp av klassnamnet snarare än en objektreferens. Kan inte komma åt icke-statiska medlemmar: Statiska metoder och variabler kan inte komma åt icke-statiska medlemmar av en klass, eftersom de inte är associerade med någon speciell instans av klassen. Kan överbelastas, men inte åsidosättas : Statiska metoder kan överbelastas, vilket innebär att du kan definiera flera metoder med samma namn men olika parametrar. De kan dock inte åsidosättas, eftersom de är associerade med klassen snarare än med en viss instans av klassen.
När en medlem förklaras statisk kan den nås innan några objekt i dess klass skapas, och utan referens till något objekt. Till exempel, i Java-programmet nedan, kommer vi åt statisk metod m1() utan att skapa något objekt av Testa klass.
c-program för strängjämförelse
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();> >}> }> |
>
>Produktion
from m1>
Statiska block
Om du behöver göra beräkningen för att initiera din statiska variabler , kan du deklarera ett statiskt block som exekveras exakt en gång, när klassen först laddas.
Tänk på följande java-program som visar användningen av statiska block.
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);> >}> }> |
>
>Produktion
Static block initialized. from main Value of a : 10 Value of b : 40>
För en detaljerad artikel om statiska block, se statiska block
Statiska variabler
När en variabel deklareras som statisk skapas en enda kopia av variabeln och delas mellan alla objekt på klassnivå. Statiska variabler är i huvudsak globala variabler. Alla instanser av klassen delar samma statiska variabel.
Viktiga punkter för statiska variabler:
- Vi kan skapa statiska variabler endast på klassnivå. Kolla här
- statiska block och statiska variabler exekveras i den ordning de finns i ett program.
Nedan visas Java-programmet för att visa att statiska block och statiska variabler exekveras i den ordning de finns i ett program.
Java
formatera java-sträng
// 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'>);> >}> }> |
>
>Produktion
from m1 Inside static block Value of a : 20 from main>
Statiska metoder
När en metod deklareras med statisk nyckelord, är det känt som den statiska metoden. Det vanligaste exemplet på en statisk metod är main( ) metod. Som diskuterats ovan kan alla statiska medlemmar nås innan några objekt i dess klass skapas, och utan referens till något objekt. Metoder som deklareras som statiska har flera begränsningar:
- De kan bara direkt anropa andra statiska metoder.
- De kan bara komma åt statisk data direkt.
- De kan inte referera till detta eller super på något sätt.
Nedan är java-programmet för att demonstrera restriktioner för statiska metoder.
Java
bild som bakgrund i css
// 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> >}> }> |
>
>
Produktion:
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>
När ska man använda statiska variabler och metoder?
Använd den statiska variabeln för egenskapen som är gemensam för alla objekt. Till exempel, i klassen Student, delar alla elever samma collegenamn. Använd statiska metoder för att ändra statiska variabler.
Tänk på följande java-program, som illustrerar användningen av statisk nyckelord med variabler och metoder.
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();> >}> }> |
>
>Produktion
name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>

Statiska klasser
En klass kan göras statisk endast om det är en kapslad klass. Vi kan inte deklarera en toppnivåklass med en statisk modifierare men kan deklarera kapslade klasser som statiska. Sådana typer av klasser kallas kapslade statiska klasser. Kapslad statisk klass behöver inte en referens för yttre klass. I det här fallet kan en statisk klass inte komma åt icke-statiska medlemmar av den yttre klassen.
Notera: För statisk kapslad klass, se a statisk kapslad klass i java
Genomförande:
Java
typkonvertering och gjutning i 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();> >}> }> |
>
>
15 av 100,00Produktion
techcodeview.com>
Här är ett exempel på Java-program som visar användningen av det statiska nyckelordet:
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();> >}> }> |
>
>Produktion
Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>
Fördelar:
- Minneseffektivitet: Statiska medlemmar tilldelas minne endast en gång under körningen av programmet, vilket kan resultera i betydande minnesbesparingar för stora program. Förbättrad prestanda : Eftersom statiska medlemmar är associerade med klassen snarare än med enskilda instanser, kan de nås snabbare och mer effektivt än icke-statiska medlemmar. Global tillgänglighet: Statiska medlemmar kan nås från var som helst i programmet, oavsett om en instans av klassen har skapats. Inkapsling av verktygsmetoder: Statiska metoder kan användas för att kapsla in verktygsfunktioner som inte kräver någon tillståndsinformation från ett objekt. Detta kan förbättra kodorganisationen och göra det lättare att återanvända verktygsfunktioner över flera klasser. Konstanter : Statiska slutvariabler kan användas för att definiera konstanter som delas över hela programmet. Klassnivåfunktionalitet: Statiska metoder kan användas för att definiera funktionalitet på klassnivå som inte kräver någon tillståndsinformation från ett objekt, såsom fabriksmetoder eller hjälpfunktioner.
Sammantaget är det statiska nyckelordet ett kraftfullt verktyg som kan hjälpa till att förbättra effektiviteten och organisationen av dina Java-program.