De statisk nøkkelord i Java brukes hovedsakelig til minnebehandling. Det statiske nøkkelordet i Java brukes til å dele samme variabel eller metode for en gitt klasse. Brukerne kan bruke statiske nøkkelord med variabler, metoder, blokker og nestede klasser. Det statiske nøkkelordet tilhører klassen enn en forekomst av klassen. Det statiske nøkkelordet brukes for en konstant variabel eller en metode som er den samme for hver forekomst av en klasse.
De statisk nøkkelord er en ikke-tilgangsmodifikator i Java som gjelder for følgende:
- Blokker
- Variabler
- Metoder
- Klasser
Merk: For å lage et statisk medlem (blokk, variabel, metode, nestet klasse), gå foran erklæringen med nøkkelordet statisk .
Kjennetegn ved statiske søkeord:
Her er noen kjennetegn ved det statiske nøkkelordet i Java:
- Delt minneallokering: Statiske variabler og metoder tildeles minneplass kun én gang under kjøringen av programmet. Denne minneplassen deles mellom alle forekomster av klassen, noe som gjør statiske medlemmer nyttige for å opprettholde global tilstand eller delt funksjonalitet. Tilgjengelig uten objektforekomst: Statiske medlemmer kan nås uten behov for å opprette en forekomst av klassen. Dette gjør dem nyttige for å tilby verktøyfunksjoner og konstanter som kan brukes på tvers av hele programmet. Tilknyttet klasse, ikke objekter: Statiske medlemmer er knyttet til klassen, ikke med individuelle objekter. Dette betyr at endringer i et statisk medlem gjenspeiles i alle forekomster av klassen, og at du kan få tilgang til statiske medlemmer ved å bruke klassenavnet i stedet for en objektreferanse. Får ikke tilgang til ikke-statiske medlemmer: Statiske metoder og variabler kan ikke få tilgang til ikke-statiske medlemmer av en klasse, siden de ikke er assosiert med noen spesiell forekomst av klassen. Kan overbelastes, men ikke overstyres : Statiske metoder kan overbelastes, noe som betyr at du kan definere flere metoder med samme navn, men forskjellige parametere. De kan imidlertid ikke overstyres, siden de er knyttet til klassen i stedet for med en bestemt forekomst av klassen.
Når et medlem er erklært statisk, kan det nås før noen objekter i klassen opprettes, og uten referanse til noe objekt. For eksempel, i Java-programmet nedenfor, får vi tilgang til statisk metode m1() uten å lage noe objekt av Test 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();> > }> }> |
>
>Produksjon
from m1>
Statiske blokker
Hvis du trenger å gjøre beregningen for å initialisere din statiske variabler , kan du deklarere en statisk blokk som blir utført nøyaktig én gang når klassen først lastes.
Tenk på følgende java-program som demonstrerer bruken av statiske blokker.
Java
hvordan du viser applikasjonen på Android
// 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);> > }> }> |
>
>Produksjon
Static block initialized. from main Value of a : 10 Value of b : 40>
For en detaljert artikkel om statiske blokker, se statiske blokker
Statiske variabler
Når en variabel er erklært som statisk, opprettes en enkelt kopi av variabelen og deles mellom alle objekter på klassenivå. Statiske variabler er i hovedsak globale variabler. Alle forekomster av klassen deler den samme statiske variabelen.
Viktige punkter for statiske variabler:
- Vi kan lage statiske variabler kun på klassenivå. Se her
- statiske blokker og statiske variabler utføres i den rekkefølgen de er tilstede i et program.
Nedenfor er Java-programmet for å demonstrere at statiske blokker og statiske variabler utføres i den rekkefølgen 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'> );> > }> }> |
>
>Produksjon
from m1 Inside static block Value of a : 20 from main>
Statiske metoder
Når en metode er deklarert med statisk nøkkelord, er det kjent som den statiske metoden. Det vanligste eksemplet på en statisk metode er hoved( ) metode. Som diskutert ovenfor, kan ethvert statisk medlem nås før noen objekter i klassen opprettes, og uten referanse til noe objekt. Metoder som er erklært som statiske har flere begrensninger:
- De kan bare kalle andre statiske metoder direkte.
- De har bare direkte tilgang til statiske data.
- De kan ikke referere til dette eller super på noen måte.
Nedenfor er java-programmet for å demonstrere restriksjoner på statiske metoder.
referanse datatyper i java
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> > }> }> |
>
>
Produksjon:
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 skal man bruke statiske variabler og metoder?
Bruk den statiske variabelen for egenskapen som er felles for alle objekter. For eksempel, i klassen Student deler alle studentene samme høyskolenavn. Bruk statiske metoder for å endre statiske variabler.
Tenk på følgende java-program, som illustrerer bruken av statisk nøkkelord 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();> > }> }> |
>
>Produksjon
name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>
Statiske klasser
En klasse kan lages statisk bare hvis det er en nestet klasse. Vi kan ikke deklarere en toppnivåklasse med en statisk modifikator, men kan erklære nestede klasser som statiske. Slike typer klasser kalles Nestede statiske klasser. Nestet statisk klasse trenger ikke en referanse til Ytre klasse. I dette tilfellet kan ikke en statisk klasse få tilgang til ikke-statiske medlemmer av den ytre klassen.
Merk: For statisk nestet klasse, se en statisk nestet klasse i java
Gjennomføring:
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();> > }> }> |
hvordan konvertere streng til int java
>
>Produksjon
techcodeview.com>
Her er et eksempel på Java-program som demonstrerer bruken av det statiske nøkkelordet:
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();> > }> }> |
>
>Produksjon
Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>
Fordeler:
- Minneeffektivitet : Statiske medlemmer tildeles minne kun én gang under kjøringen av programmet, noe som kan resultere i betydelige minnebesparelser for store programmer. Forbedret ytelse : Fordi statiske medlemmer er knyttet til klassen i stedet for med individuelle forekomster, kan de nås raskere og mer effektivt enn ikke-statiske medlemmer. Global tilgjengelighet: Statiske medlemmer kan nås fra hvor som helst i programmet, uavhengig av om en forekomst av klassen er opprettet. Innkapsling av verktøymetoder: Statiske metoder kan brukes til å innkapsle verktøyfunksjoner som ikke krever noen tilstandsinformasjon fra et objekt. Dette kan forbedre kodeorganisering og gjøre det enklere å gjenbruke verktøyfunksjoner på tvers av flere klasser. Konstanter : Statiske sluttvariabler kan brukes til å definere konstanter som deles på tvers av hele programmet. Klassenivåfunksjonalitet: Statiske metoder kan brukes til å definere funksjonalitet på klassenivå som ikke krever noen tilstandsinformasjon fra et objekt, for eksempel fabrikkmetoder eller hjelpefunksjoner.
Totalt sett er det statiske nøkkelordet et kraftig verktøy som kan bidra til å forbedre effektiviteten og organiseringen av Java-programmene dine.