logo

statisch trefwoord in Java

De statisch trefwoord in Java wordt voornamelijk gebruikt voor geheugenbeheer. Het statische trefwoord in Java wordt gebruikt om dezelfde variabele of methode van een bepaalde klasse te delen. De gebruikers kunnen statische trefwoorden toepassen met variabelen, methoden, blokken en geneste klassen. Het statische trefwoord behoort tot de klasse en is dan een instantie van de klasse. Het statische trefwoord wordt gebruikt voor een constante variabele of een methode die voor elke instantie van een klasse hetzelfde is.

De statisch trefwoord is een niet-toegangsmodifier in Java die van toepassing is op het volgende:



  1. Blokken
  2. Variabelen
  3. Methoden
  4. Klassen

Opmerking: Om een ​​statisch lid (blok, variabele, methode, geneste klasse) te maken, moet u de declaratie voorafgaan door het trefwoord statisch .

Kenmerken van statisch zoekwoord:

Hier zijn enkele kenmerken van het statische trefwoord in Java:

exemplaar van in Java
    Gedeelde geheugentoewijzing: Aan statische variabelen en methoden wordt slechts één keer geheugenruimte toegewezen tijdens de uitvoering van het programma. Deze geheugenruimte wordt gedeeld door alle instanties van de klasse, waardoor statische leden nuttig zijn voor het behouden van de globale status of gedeelde functionaliteit. Toegankelijk zonder instantiatie van objecten: Statische leden zijn toegankelijk zonder dat er een exemplaar van de klasse hoeft te worden gemaakt. Dit maakt ze nuttig voor het leveren van hulpprogrammafuncties en constanten die in het hele programma kunnen worden gebruikt. Geassocieerd met klasse, niet met objecten: Statische leden zijn geassocieerd met de klasse, niet met individuele objecten. Dit betekent dat wijzigingen aan een statisch lid worden weerspiegeld in alle exemplaren van de klasse, en dat u toegang kunt krijgen tot statische leden met behulp van de klassenaam in plaats van een objectverwijzing. Geen toegang tot niet-statische leden: Statische methoden en variabelen hebben geen toegang tot niet-statische leden van een klasse, omdat ze niet aan een bepaalde instantie van de klasse zijn gekoppeld. Kan overbelast worden, maar niet overschreven: Statische methoden kunnen overbelast worden, wat betekent dat u meerdere methoden met dezelfde naam maar met verschillende parameters kunt definiëren. Ze kunnen echter niet worden overschreven, omdat ze eerder aan de klasse zijn gekoppeld dan aan een bepaalde instantie van de klasse.

Wanneer een lid statisch wordt verklaard, is het toegankelijk voordat er objecten van zijn klasse zijn gemaakt, en zonder verwijzing naar welk object dan ook. In het onderstaande Java-programma hebben we bijvoorbeeld toegang tot de statische methode m1() zonder enig object van de Test klas.



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

>

>

Uitvoer

from m1>

Statische blokken

Als u de berekening moet uitvoeren om uw statische variabelen , kun je een statisch blok declareren dat precies één keer wordt uitgevoerd, wanneer de klasse voor het eerst wordt geladen.

Beschouw het volgende Java-programma dat het gebruik van statische blokken demonstreert.

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

>

>

Uitvoer

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

Zie statische blokken voor een gedetailleerd artikel over statische blokken

Statische variabelen

Wanneer een variabele als statisch wordt gedeclareerd, wordt er één kopie van de variabele gemaakt en gedeeld met alle objecten op klasseniveau. Statische variabelen zijn in wezen globale variabelen. Alle instanties van de klasse delen dezelfde statische variabele.

Belangrijke punten voor statische variabelen:

  • We kunnen alleen statische variabelen op klassenniveau maken. Kijk hier
  • statisch blok en statische variabelen worden uitgevoerd in de volgorde waarin ze in een programma aanwezig zijn.

Hieronder vindt u het Java-programma om aan te tonen dat statische blokken en statische variabelen worden uitgevoerd in de volgorde waarin ze in een programma voorkomen.

Java


geblokkeerde nummers



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

>

>

Uitvoer

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

Statische methoden

Wanneer een methode wordt gedeclareerd met de statisch trefwoord, het staat bekend als de statische methode. Het meest voorkomende voorbeeld van een statische methode is de voornaamst( ) methode. Zoals hierboven besproken, kan elk statisch lid worden benaderd voordat er objecten van zijn klasse zijn gemaakt, en zonder verwijzing naar welk object dan ook. Methoden die als statisch zijn gedeclareerd, hebben verschillende beperkingen:

  • Ze kunnen alleen rechtstreeks andere statische methoden aanroepen.
  • Ze hebben alleen rechtstreeks toegang tot statische gegevens.
  • Ze kunnen er niet naar verwijzen dit of super In elk geval.

Hieronder vindt u het Java-programma om beperkingen op statische methoden aan te tonen.

Java-stringmethoden

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

>

>

Uitgang:

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>

Wanneer gebruik je statische variabelen en methoden?

Gebruik de statische variabele voor de eigenschap die gemeenschappelijk is voor alle objecten. In de klas Student hebben alle studenten bijvoorbeeld dezelfde universiteitsnaam. Gebruik statische methoden voor het wijzigen van statische variabelen.

Beschouw het volgende Java-programma, dat het gebruik illustreert van statisch trefwoorden met variabelen en methoden.

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

>

>

Uitvoer

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

D

Statische klassen

Er kan een klasse worden gemaakt statisch alleen als het een geneste klasse is. We kunnen geen klasse op het hoogste niveau declareren met een statische modifier, maar geneste klassen kunnen wel als statisch worden gedeclareerd. Dergelijke soorten klassen worden geneste statische klassen genoemd. Geneste statische klasse heeft geen verwijzing naar de Outer-klasse nodig. In dit geval heeft een statische klasse geen toegang tot niet-statische leden van de Outer-klasse.

Opmerking: Voor statische geneste klasse, zie a statische geneste klasse in Java

Implementatie:

10 tot de macht 6

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

>

>

interne werking van hashmap
Uitvoer

techcodeview.com>

Hier is een voorbeeld van een Java-programma dat het gebruik van het statische trefwoord demonstreert:

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

>

>

Uitvoer

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

Voordelen:

    Geheugenefficiëntie: Aan statische leden wordt slechts één keer geheugen toegewezen tijdens de uitvoering van het programma, wat kan resulteren in aanzienlijke geheugenbesparingen voor grote programma's. Verbeterde prestaties: Omdat statische leden aan de klasse zijn gekoppeld in plaats van aan individuele instanties, zijn ze sneller en efficiënter toegankelijk dan niet-statische leden. Globale toegankelijkheid: Statische leden zijn overal in het programma toegankelijk, ongeacht of er een exemplaar van de klasse is gemaakt. Inkapseling van nutsmethoden: Statische methoden kunnen worden gebruikt om nutsfuncties in te kapselen waarvoor geen statusinformatie van een object nodig is. Dit kan de organisatie van de code verbeteren en het gemakkelijker maken om hulpprogrammafuncties in meerdere klassen te hergebruiken. Constanten: Statische eindvariabelen kunnen worden gebruikt om constanten te definiëren die door het hele programma worden gedeeld. Functionaliteit op klasseniveau: Statische methoden kunnen worden gebruikt om functionaliteit op klasseniveau te definiëren waarvoor geen statusinformatie van een object vereist is, zoals fabrieksmethoden of helperfuncties.

Over het geheel genomen is het statische trefwoord een krachtig hulpmiddel dat kan helpen de efficiëntie en organisatie van uw Java-programma's te verbeteren.