Het static keyword in Java wordt veel gebruikt in Java-programmering. Het Java static keyword wordt gebruikt om een variabele op klassen-niveau te creëren in Java. Statische variabelen en methoden maken deel uit van de klasse, niet van de instanties van de klasse.
Static keyword in Java
Java static keyword kan worden gebruikt in vijf gevallen zoals weergegeven in de onderstaande afbeelding.
We zullen hier vier daarvan bespreken, de vijfde werd geïntroduceerd in Java 8 en is besproken in Java 8 interface changes.
-
Java statische variabele
We kunnen het
static
trefwoord gebruiken met een variabele op klasseniveau. Een statische variabele is een klassevariabele en behoort niet tot Object/instance van de klasse. Omdat statische variabelen worden gedeeld over alle instanties van Object, zijn ze niet thread-safe. Meestal worden statische variabelen gebruikt met het finale trefwoord voor gemeenschappelijke middelen of constanten die door alle objecten kunnen worden gebruikt. Als de statische variabele niet privé is, kunnen we er toegang toe krijgen metKlasseNaam.variabeleNaam
// voorbeeld van een statische variabele private static int teller; public static String str; public static final String DB_USER = "mijngebruiker";
-
Java statische methode
Hetzelfde als statische variabele, behoort een statische methode tot de klasse en niet tot de instanties van de klasse. Een statische methode kan alleen toegang hebben tot statische variabelen van de klasse en alleen statische methoden van de klasse aanroepen. Gewoonlijk zijn statische methoden hulpprogramma-methoden die we willen blootstellen om door andere klassen te worden gebruikt zonder de noodzaak van het maken van een instantie. Bijvoorbeeld Collections klasse. Java Wrapper klassen en hulpprogramma-klassen bevatten veel statische methoden. De main() methode die het toegangspunt is van een java programma zelf is een statische methode.
//voorbeeld van een statische methode public static void setCount(int count) { if(count > 0) StaticExample.count = count; } //statische hulpprogramma-methode public static int addInts(int i, int...js){ int sum=i; for(int x : js) sum+=x; return sum; }
Vanaf Java 8 kunnen we ook statische methoden in interfaces hebben. Voor meer details lees alstublieft Java 8 interface veranderingen.
-
Java statisch blok
Het Java statische blok is de groep statements die wordt uitgevoerd wanneer de klasse in het geheugen wordt geladen door Java ClassLoader. Het statische blok wordt gebruikt om de statische variabelen van de klasse te initialiseren. Meestal wordt het gebruikt om statische resources te maken wanneer de klasse wordt geladen. We kunnen geen niet-statische variabelen in het statische blok benaderen. We kunnen meerdere statische blokken in een klasse hebben, hoewel dat niet veel zin heeft. De code in het statische blok wordt slechts één keer uitgevoerd wanneer de klasse in het geheugen wordt geladen.
static{ //kan worden gebruikt om resources te initialiseren wanneer de klasse wordt geladen System.out.println("Statisch voorbeeld statisch blok"); //kan alleen statische variabelen en methoden benaderen str="Test"; setCount(2); }
-
Java Statische Klasse
We kunnen het keyword static gebruiken met geneste klassen. Het keyword static kan niet worden gebruikt met top-level klassen. Een statische geneste klasse is hetzelfde als elke andere top-level klasse en is alleen genest voor verpakkingsgemak. Lees: Java Geneste Klassen
Laten we alle static trefwoorden in java-gebruik zien in een voorbeeldprogramma. StaticExample.java
package com.journaldev.misc;
public class StaticExample {
//static blok
static{
//kan worden gebruikt om bronnen te initialiseren wanneer de klasse wordt geladen
System.out.println("StaticExample static block");
//kan alleen statische variabelen en methoden benaderen
str="Test";
setCount(2);
}
//meerdere statische blokken in dezelfde klasse
static{
System.out.println("StaticExample static block2");
}
//voorbeeld van statische variabele
private static int count; //kept private to control its value through setter
public static String str;
public int getCount() {
return count;
}
//voorbeeld van statische methode
public static void setCount(int count) {
if(count > 0)
StaticExample.count = count;
}
//statische hulpmethode
public static int addInts(int i, int...js){
int sum=i;
for(int x : js) sum+=x;
return sum;
}
//voorbeeld van statische klasse - alleen gebruikt voor verpakkingsgemak
public static class MyStaticClass{
public int count;
}
}
Laten we zien hoe we statische variabelen, methoden en statische klassen gebruiken in een testprogramma. TestStatic.java
package com.journaldev.misc;
public class TestStatic {
public static void main(String[] args) {
StaticExample.setCount(5);
//niet-private statische variabelen kunnen worden benaderd met de klassenaam
StaticExample.str = "abc";
StaticExample se = new StaticExample();
System.out.println(se.getCount());
//klasse- en instantie statische variabelen zijn hetzelfde
System.out.println(StaticExample.str +" is same as "+se.str);
System.out.println(StaticExample.str == se.str);
//statische geneste klassen zijn als normale top-level klassen
StaticExample.MyStaticClass myStaticClass = new StaticExample.MyStaticClass();
myStaticClass.count=10;
StaticExample.MyStaticClass myStaticClass1 = new StaticExample.MyStaticClass();
myStaticClass1.count=20;
System.out.println(myStaticClass.count);
System.out.println(myStaticClass1.count);
}
}
De output van het bovenstaande voorbeeldprogramma met statisch trefwoord in Java is:
StaticExample static block
StaticExample static block2
5
abc is same as abc
true
10
20
Merk op dat de code van het statische blok eerst en slechts één keer wordt uitgevoerd zodra de klasse in het geheugen is geladen. Andere uitvoer is vanzelfsprekend.
Java statische import
Normaal gesproken benaderen we statische leden met behulp van een klassereferentie, vanaf Java 1.5 kunnen we java static import gebruiken om klassereferentie te vermijden. Hieronder staat een eenvoudig voorbeeld van Java static import.
package com.journaldev.test;
public class A {
public static int MAX = 1000;
public static void foo(){
System.out.println("foo static method");
}
}
package com.journaldev.test;
import static com.journaldev.test.A.MAX;
import static com.journaldev.test.A.foo;
public class B {
public static void main(String args[]){
System.out.println(MAX); //normally A.MAX
foo(); // normally A.foo()
}
}
Let op de importverklaringen, voor statische import moeten we import static
gebruiken gevolgd door het volledig gekwalificeerde statische lid van een klasse. Om alle statische leden van een klasse te importeren, kunnen we * gebruiken zoals in import static com.journaldev.test.A.*;
. We moeten het alleen gebruiken wanneer we de statische variabele van een klasse meerdere keren gebruiken, het is niet goed voor de leesbaarheid. Update: Ik heb onlangs een video gemaakt om het statische trefwoord in java uit te leggen, je zou het hieronder moeten bekijken. https://www.youtube.com/watch?v=2e-l1vb\_fwM
Source:
https://www.digitalocean.com/community/tutorials/static-keyword-in-java