logo

statisk nøgleord i Java

Det statisk søgeord i Java bruges hovedsageligt til hukommelseshåndtering. Det statiske nøgleord i Java bruges til at dele den samme variabel eller metode i en given klasse. Brugerne kan anvende statiske nøgleord med variabler, metoder, blokke og indlejrede klasser. Det statiske nøgleord tilhører klassen end en forekomst af klassen. Det statiske nøgleord bruges til en konstant variabel eller en metode, der er den samme for hver forekomst af en klasse.

Det statisk nøgleord er en ikke-adgangsmodifikator i Java, der er anvendelig til følgende:



  1. Blokke
  2. Variabler
  3. Metoder
  4. Klasser

Bemærk: For at oprette et statisk medlem (blok, variabel, metode, indlejret klasse), skal du gå foran dets erklæring med nøgleordet statisk .

Karakteristika for statisk søgeord:

Her er nogle karakteristika ved det statiske søgeord i Java:

    Delt hukommelsesallokering: Statiske variabler og metoder tildeles kun hukommelsesplads én gang under afviklingen af ​​programmet. Denne hukommelsesplads deles mellem alle forekomster af klassen, hvilket gør statiske medlemmer nyttige til at opretholde global tilstand eller delt funktionalitet. Tilgængelig uden objektforekomst: Statiske medlemmer kan tilgås uden behov for at oprette en forekomst af klassen. Dette gør dem nyttige til at levere hjælpefunktioner og konstanter, der kan bruges på tværs af hele programmet. Tilknyttet klasse, ikke objekter: Statiske medlemmer er knyttet til klassen, ikke med individuelle objekter. Det betyder, at ændringer af et statisk medlem afspejles i alle forekomster af klassen, og at du kan få adgang til statiske medlemmer ved hjælp af klassenavnet i stedet for en objektreference. Kan ikke få adgang til ikke-statiske medlemmer: Statiske metoder og variabler kan ikke få adgang til ikke-statiske medlemmer af en klasse, da de ikke er knyttet til nogen bestemt forekomst af klassen. Kan overbelastes, men ikke tilsidesættes : Statiske metoder kan overbelastes, hvilket betyder, at du kan definere flere metoder med samme navn, men forskellige parametre. De kan dog ikke tilsidesættes, da de er knyttet til klassen i stedet for med en bestemt forekomst af klassen.

Når et medlem erklæres statisk, kan det tilgås, før nogen objekter i dets klasse oprettes, og uden reference til noget objekt. For eksempel, i nedenstående java-program, får vi adgang til statisk metode m1() uden at skabe noget objekt af Prøve klasse.



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>

Statiske blokke

Hvis du har brug for at udføre beregningen for at initialisere din statiske variable , kan du erklære en statisk blok, der udføres nøjagtigt én gang, når klassen først indlæses.

Overvej følgende java-program, der demonstrerer brugen af ​​statiske blokke.

Java


string replaceall 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>

For en detaljeret artikel om statiske blokke, se statiske blokke

Statiske variable

Når en variabel erklæres som statisk, oprettes en enkelt kopi af variablen og deles mellem alle objekter på klasseniveau. Statiske variable er i det væsentlige globale variable. Alle forekomster af klassen deler den samme statiske variabel.

Vigtige punkter for statiske variable:

  • Vi kan kun oprette statiske variable på klasseniveau. Se her
  • statiske blok og statiske variable udføres i den rækkefølge, de er til stede i et program.

Nedenfor er Java-programmet til at demonstrere, at statiske blok- og statiske variabler udføres i den rækkefølge, de er til stede i et program.

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'>);> >}> }>

>

>

Produktion

from m1 Inside static block Value of a : 20 from main>

Statiske metoder

Når en metode er deklareret med statisk søgeord, er det kendt som den statiske metode. Det mest almindelige eksempel på en statisk metode er hoved( ) metode. Som diskuteret ovenfor, kan ethvert statisk medlem tilgås, før nogen objekter i dens klasse er oprettet, og uden reference til noget objekt. Metoder, der er erklæret som statiske, har flere begrænsninger:

  • De kan kun direkte kalde andre statiske metoder.
  • De kan kun få direkte adgang til statiske data.
  • De kan ikke henvise til det her eller super på nogen måde.

Nedenfor er java-programmet til at demonstrere restriktioner på statiske metoder.

selen grundlæggende

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> >}> }>

>

>

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>

Hvornår skal man bruge statiske variabler og metoder?

Brug den statiske variabel for egenskaben, der er fælles for alle objekter. For eksempel i klassen Student deler alle elever det samme universitetsnavn. Brug statiske metoder til at ændre statiske variable.

Overvej følgende java-program, der illustrerer brugen af statisk søgeord med variabler og 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>

d

Statiske klasser

Der kan laves en klasse statisk kun hvis det er en indlejret klasse. Vi kan ikke erklære en klasse på øverste niveau med en statisk modifikator, men kan erklære indlejrede klasser som statiske. Sådanne typer klasser kaldes indlejrede statiske klasser. Indlejret statisk klasse behøver ikke en reference til Ydre klasse. I dette tilfælde kan en statisk klasse ikke få adgang til ikke-statiske medlemmer af den ydre klasse.

Bemærk: For statisk indlejret klasse, se en statisk indlejret klasse i java

Implementering:

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();> >}> }>

begrænsninger af e-bank

>

>

Produktion

techcodeview.com>

Her er et eksempel på et Java-program, der demonstrerer brugen af ​​det statiske nøgleord:

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>

Fordele:

    Hukommelseseffektivitet: Statiske medlemmer tildeles kun hukommelse én gang under afviklingen af ​​programmet, hvilket kan resultere i betydelige hukommelsesbesparelser for store programmer. Forbedret ydeevne: Fordi statiske medlemmer er knyttet til klassen snarere end med individuelle forekomster, kan de tilgås hurtigere og mere effektivt end ikke-statiske medlemmer. Global tilgængelighed: Statiske medlemmer kan tilgås fra hvor som helst i programmet, uanset om der er oprettet en forekomst af klassen. Indkapsling af hjælpemetoder: Statiske metoder kan bruges til at indkapsle hjælpefunktioner, der ikke kræver nogen tilstandsinformation fra et objekt. Dette kan forbedre kodeorganisering og gøre det lettere at genbruge hjælpefunktioner på tværs af flere klasser. Konstanter: Statiske slutvariabler kan bruges til at definere konstanter, der deles på tværs af hele programmet. Klasseniveaufunktionalitet: Statiske metoder kan bruges til at definere funktionalitet på klasseniveau, der ikke kræver nogen tilstandsinformation fra et objekt, såsom fabriksmetoder eller hjælpefunktioner.

Samlet set er det statiske nøgleord et kraftfuldt værktøj, der kan hjælpe med at forbedre effektiviteten og organiseringen af ​​dine Java-programmer.