Statisch Java-trefwoord (met voorbeelden)

In deze zelfstudie leren we aan de hand van voorbeelden over het statische Java-sleutelwoord, statische methoden, statische variabelen en statische blokken.

Wat is een statisch trefwoord in Java?

Als we in Java toegang willen hebben tot klasleden, moeten we eerst een instantie van de klas maken. Maar er zullen situaties zijn waarin we toegang willen hebben tot klasleden zonder variabelen te creëren.

In die situaties kunnen we het statictrefwoord in Java gebruiken. Als we toegang willen krijgen tot klasleden zonder een instantie van de klas te maken, moeten we de klasleden statisch declareren.

De Mathklasse in Java heeft bijna alle leden statisch. We hebben dus toegang tot de leden zonder instanties van de klasse Math te maken. Bijvoorbeeld,

 public class Main ( public static void main( String() args ) ( // accessing the methods of the Math class System.out.println("Absolute value of -12 = " + Math.abs(-12)); System.out.println("Value of PI = " + Math.PI); System.out.println("Value of E = " + Math.E); System.out.println("2^2 = " + Math.pow(2,2)); ) )

Uitgang :

 Absolute waarde van -12 = 12 Waarde van PI = 3,141592653589793 Waarde van E = 2,718281828459045 2 2 = 4,0

In het bovenstaande voorbeeld hebben we geen instanties van de Mathklasse gemaakt. Maar we hebben toegang tot de methoden: abs()en pow()en variabelen: PIen E.

Het is mogelijk omdat de methoden en variabelen van de Mathklasse statisch zijn.

Statische methoden

Statische methoden worden ook wel klassemethoden genoemd. Het is omdat een statische methode tot de klasse behoort in plaats van het object van een klasse.

En we kunnen statische methoden rechtstreeks aanroepen met behulp van de klassenaam. Bijvoorbeeld,

 class Test ( // static method inside the Test class public static void method() (… ) ) class Main ( // invoking the static method Test.method(); )

Hier kunnen we zien dat de statische methode rechtstreeks toegankelijk is vanuit andere klassen met behulp van de klassenaam.

In elk Java-programma hebben we de mainmethode gedeclareerd static. Het is omdat om het programma uit te voeren, de JVM in staat zou moeten zijn om de hoofdmethode aan te roepen tijdens de beginfase waarin er geen objecten in het geheugen bestaan.

Voorbeeld 1: Java-statische en niet-statische methoden

 class StaticTest ( // non-static method int multiply(int a, int b)( return a * b; ) // static method static int add(int a, int b)( return a + b; ) ) public class Main ( public static void main( String() args ) ( // create an instance of the StaticTest class StaticTest st = new StaticTest(); // call the nonstatic method System.out.println(" 2 * 2 = " + st.multiply(2,2)); // call the static method System.out.println(" 2 + 3 = " + StaticTest.add(2,3)); ) )

Uitgang :

 2 * 2 = 4 2 + 3 = 5

In het bovenstaande programma hebben we een niet-statische methode met de naam verklaard multiply()en een statische methode met de naam add()binnen de klasse StaticTest.

Binnen de klasse Main kunnen we zien dat we de niet-statische methode aanroepen met behulp van het object van de class ( st.multiply(2, 2)). We roepen echter de statische methode aan met behulp van de klassenaam ( StaticTest.add(2, 3)).

Statische variabelen

Als we in Java objecten van een klasse maken, heeft elk object zijn eigen kopie van alle variabelen van de klasse. Bijvoorbeeld,

 class Test ( // regular variable int age; ) class Main ( // create instances of Test Test test1 = new Test(); Test test2 = new Test(); )

Hier hebben zowel de objecten test1 als test2 afzonderlijke kopieën van de variabele leeftijd. En ze verschillen van elkaar.

Als we echter een variabele statisch declareren, delen alle objecten van de klasse dezelfde statische variabele. Het is omdat net als statische methoden ook statische variabelen aan de klasse zijn gekoppeld. En we hoeven geen objecten van de klasse te maken om toegang te krijgen tot de statische variabelen. Bijvoorbeeld,

 class Test ( // static variable static int age; ) class Main ( // access the static variable Test.age = 20; )

Hier kunnen we zien dat we de statische variabele van de andere klasse benaderen met behulp van de klassenaam.

Voorbeeld 2: Java statische en niet-statische variabelen

 class Test ( // static variable static int max = 10; // non-static variable int min = 5; ) public class Main ( public static void main(String() args) ( Test obj = new Test(); // access the non-static variable System.out.println("min + 1 = " + (obj.min + 1)); // access the static variable System.out.println("max + 1 = " + (Test.max + 1)); ) )

Uitgang :

 min + 1 = 6 max + 1 = 11

In het bovenstaande programma hebben we een niet-statische variabele met de naam min en een statische variabele met de naam max binnen de klasse Test gedeclareerd.

Binnen de klasse Main kunnen we zien dat we de niet-statische variabele aanroepen met behulp van het object van de klasse ( obj.min + 1). We roepen de statische variabele echter aan met behulp van de klassenaam ( Test.max + 1).

Opmerking : Statische variabelen worden zelden gebruikt in Java. In plaats daarvan worden de statische constanten gebruikt. Deze statische constanten worden gedefinieerd door static finalsleutelwoorden en weergegeven in hoofdletters. Dit is de reden waarom sommige mensen ook liever hoofdletters gebruiken voor statische variabelen.

Toegang tot statische variabelen en methoden binnen de klasse

We hebben toegang tot de statische variabele vanuit een andere klasse. Daarom hebben we de klassenaam gebruikt om er toegang toe te krijgen. Als we echter toegang willen hebben tot het statische lid vanuit de klas, kan het rechtstreeks worden benaderd. Bijvoorbeeld,

 public class Main ( // static variable static int age; // static method static void display() ( System.out.println("Static Method"); ) public static void main(String() args) ( // access the static variable age = 30; System.out.println("Age is " + age); // access the static method display(); ) )

Uitgang :

 Leeftijd is 30 Statische methode

Hier hebben we rechtstreeks toegang tot de statische variabele en methode zonder de klassenaam te gebruiken. Het is omdat statische variabelen en methoden standaard openbaar zijn. En aangezien we toegang hebben vanuit dezelfde klasse, hoeven we de klassenaam niet op te geven.

Statische blokken

In Java worden statische blokken gebruikt om de statische variabelen te initialiseren. Bijvoorbeeld,

 class Test ( // static variable static int age; // static block static ( age = 23; ) )

Hier kunnen we zien dat we een statisch blok hebben gebruikt met de syntaxis:

 static ( // variable initialization )

Het statische blok wordt slechts één keer uitgevoerd wanneer de klasse in het geheugen wordt geladen. De klasse wordt geladen als het object van de klasse in code wordt opgevraagd of de statische leden in code worden opgevraagd.

Een klasse kan meerdere statische blokken hebben en elk statisch blok wordt uitgevoerd in dezelfde volgorde waarin ze in een programma zijn geschreven.

Voorbeeld 3: gebruik van statisch blok in java

 class Main ( // static variables static int a = 23; static int b; static int max; // static blocks static ( System.out.println("First Static block."); b = a * 4; ) static ( System.out.println("Second Static block."); max = 30; ) // static method static void display() ( System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("max = " + max); ) public static void main(String args()) ( // calling the static method display(); ) )

Uitgang :

Eerste statisch blok. Tweede statisch blok. a = 23 b = 92 max = 30

In het bovenstaande programma. zodra de Main-klasse is geladen,

  • De waarde van a is ingesteld op 23.
  • Het eerste statische blok wordt uitgevoerd. Daarom wordt de string First Static blockafgedrukt en wordt de waarde van b ingesteld op a * 4.
  • Het tweede statische blok wordt uitgevoerd. Daarom wordt de string Second Static blockafgedrukt en wordt de waarde van max ingesteld op 30.
  • En tot slot worden de afdrukinstructies binnen de methode display()uitgevoerd.

Geneste statische klasse

In Java kunnen we een klasse binnen een andere klasse declareren. Dergelijke klassen staan ​​bekend als geneste klassen. Geneste klassen zijn van 2 typen:

  • Statische geneste klassen
  • Niet-statische geneste klassen

Bijvoorbeeld,

 class OuterClass ( // static nested class static class NestedClass (… ) // non-static nested class class InnerClass (… ) )

Bezoek de Java Nested Class voor meer informatie.

Interessante artikelen...