logo

staattinen avainsana Javassa

The staattinen avainsana Javassa käytetään pääasiassa muistinhallintaan. Javassa staattista avainsanaa käytetään jakamaan tietyn luokan saman muuttujan tai menetelmän. Käyttäjät voivat käyttää staattisia avainsanoja muuttujilla, menetelmillä, lohkoilla ja sisäkkäisillä luokilla. Staattinen avainsana kuuluu luokkaan kuin luokan esiintymä. Staattista avainsanaa käytetään vakiomuuttujalle tai menetelmälle, joka on sama luokan jokaiselle esiintymälle.

The staattinen avainsana on Java-käyttöliittymän muokkaus, joka soveltuu seuraaviin:

  1. Lohkot
  2. Muuttujat
  3. menetelmät
  4. Luokat

Huomautus: Jos haluat luoda staattisen jäsenen (lohko, muuttuja, metodi, sisäkkäinen luokka), kirjoita sen määrittelyn eteen avainsana staattinen .



Staattisen avainsanan ominaisuudet:

Tässä on joitain Java-avainsanan ominaisuuksia:

    Jaetun muistin varaus: Staattisille muuttujille ja menetelmille varataan muistitilaa vain kerran ohjelman suorituksen aikana. Tämä muistitila on jaettu luokan kaikkien esiintymien kesken, mikä tekee staattisista jäsenistä hyödyllisiä globaalin tilan tai jaetun toiminnan ylläpitämisessä. Käytettävissä ilman objektin ilmentymistä: Staattisia jäseniä voidaan käyttää ilman tarvetta luoda luokan esiintymää. Tämä tekee niistä hyödyllisiä tarjoamaan aputoimintoja ja vakioita, joita voidaan käyttää koko ohjelmassa. Liitetty luokkaan, ei objekteihin: Staattiset jäsenet liittyvät luokkaan, ei yksittäisiin objekteihin. Tämä tarkoittaa, että muutokset staattiseen jäseneen näkyvät kaikissa luokan esiintymissä ja että voit käyttää staattisia jäseniä käyttämällä luokan nimeä objektiviittauksen sijaan. Ei-staattisia jäseniä ei voi käyttää: Staattiset menetelmät ja muuttujat eivät voi käyttää luokan ei-staattisia jäseniä, koska niitä ei ole liitetty mihinkään tiettyyn luokan esiintymään. Voidaan ylikuormittaa, mutta ei ohittaa : Staattiset menetelmät voidaan ylikuormittaa, mikä tarkoittaa, että voit määrittää useita menetelmiä samalla nimellä, mutta eri parametreilla. Niitä ei kuitenkaan voida ohittaa, koska ne liittyvät luokkaan eikä luokan tiettyyn esiintymään.

Kun jäsen on julistettu staattiseksi, sitä voidaan käyttää ennen kuin kaikki sen luokan objektit luodaan ja ilman viittausta mihinkään objektiin. Esimerkiksi alla olevassa java-ohjelmassa käytämme staattista menetelmää m1() luomatta mitään objektia Testata luokkaa.

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

>

>

Lähtö

from m1>

Staattiset lohkot

Jos sinun on suoritettava laskenta alustaaksesi staattiset muuttujat , voit ilmoittaa staattisen lohkon, joka suoritetaan tasan kerran, kun luokka ladataan ensimmäisen kerran.

Harkitse seuraavaa Java-ohjelmaa, joka osoittaa staattisten lohkojen käytön.

Java


c ohjelmat



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

>

>

Lähtö

Static block initialized. from main Value of a : 10 Value of b : 40>

Yksityiskohtainen artikkeli staattisista lohkoista on kohdassa staattiset lohkot

Staattiset muuttujat

Kun muuttuja on ilmoitettu staattiseksi, muuttujasta luodaan yksi kopio ja jaetaan se kaikkien luokkatason objektien kesken. Staattiset muuttujat ovat pohjimmiltaan globaaleja muuttujia. Kaikilla luokan esiintymillä on sama staattinen muuttuja.

Tärkeitä kohtia staattisille muuttujille:

  • Voimme luoda staattisia muuttujia vain luokkatasolla. Katso tästä
  • staattiset lohkot ja staattiset muuttujat suoritetaan siinä järjestyksessä kuin ne ovat ohjelmassa.

Alla on Java-ohjelma, joka osoittaa, että staattiset lohkot ja staattiset muuttujat suoritetaan siinä järjestyksessä, jossa ne ovat ohjelmassa.

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

>

>

Lähtö

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

Staattiset menetelmät

Kun menetelmä on ilmoitettu staattinen avainsana, se tunnetaan staattisena menetelmänä. Yleisin esimerkki staattisesta menetelmästä on pää( ) menetelmä. Kuten edellä mainittiin, mihin tahansa staattiseen jäseneen voidaan päästä käsiksi ennen kuin sen luokan objektit luodaan, ja ilman viittausta mihinkään objektiin. Staattisiksi julistetuilla menetelmillä on useita rajoituksia:

  • He voivat kutsua vain suoraan muita staattisia menetelmiä.
  • He voivat käyttää suoraan vain staattisia tietoja.
  • He eivät voi viitata Tämä tai super millään tavalla.

Alla on Java-ohjelma, joka osoittaa staattisten menetelmien rajoitukset.

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

>

>

Lähtö:

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>

Milloin staattisia muuttujia ja menetelmiä käytetään?

Käytä staattista muuttujaa ominaisuudelle, joka on yhteinen kaikille objekteille. Esimerkiksi Opiskelija-luokassa kaikilla oppilailla on sama oppilaitoksen nimi. Käytä staattisia menetelmiä staattisten muuttujien muuttamiseen.

Harkitse seuraavaa Java-ohjelmaa, joka havainnollistaa ohjelman käyttöä staattinen avainsanat muuttujilla ja menetelmillä.

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

>

>

Lähtö

name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>

d

Staattiset luokat

Luokka voidaan tehdä staattinen vain jos se on sisäkkäinen luokka. Emme voi ilmoittaa ylätason luokkaa staattisella muokkaimella, mutta sisäkkäiset luokat voidaan ilmoittaa staattisiksi. Tällaisia ​​luokkia kutsutaan sisäkkäisiksi staattisiksi luokiksi. Sisäkkäinen staattinen luokka ei tarvitse ulkoluokan viittausta. Tässä tapauksessa staattinen luokka ei voi käyttää ulkoluokan ei-staattisia jäseniä.

Huomautus: Katso staattinen sisäkkäinen luokka a staattinen sisäkkäinen luokka javassa

Toteutus:

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

>

>

Lähtö

techcodeview.com>

Tässä on esimerkki Java-ohjelmasta, joka näyttää staattisen avainsanan käytön:

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

>

>

Lähtö

Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>

Edut:

    Muistin tehokkuus: Staattisille jäsenille varataan muistia vain kerran ohjelman suorituksen aikana, mikä voi johtaa merkittäviin muistinsäästöihin suurissa ohjelmissa. Parempi suorituskyky: Koska staattiset jäsenet liittyvät luokkaan yksittäisten esiintymien sijaan, niitä voidaan käyttää nopeammin ja tehokkaammin kuin ei-staattisia jäseniä. Globaali saavutettavuus: Staattisia jäseniä voidaan käyttää mistä tahansa ohjelman kohdasta riippumatta siitä, onko luokan esiintymä luotu. Apumenetelmien kapselointi: Staattisia menetelmiä voidaan käyttää sellaisten aputoimintojen kapseloimiseen, jotka eivät vaadi tilatietoja objektilta. Tämä voi parantaa koodin organisointia ja helpottaa aputoimintojen uudelleenkäyttöä useissa luokissa. Vakiot: Staattisia lopullisia muuttujia voidaan käyttää vakioiden määrittämiseen, jotka jaetaan koko ohjelmalle. Luokkatason toiminnallisuus: Staattisten menetelmien avulla voidaan määrittää luokkatason toimintoja, jotka eivät vaadi tilatietoja objektilta, kuten tehdasmenetelmiä tai aputoimintoja.

Kaiken kaikkiaan staattinen avainsana on tehokas työkalu, joka voi auttaa parantamaan Java-ohjelmien tehokkuutta ja organisointia.