Static Keyword in Java
Das Keyword „static“ in Java wird häufig in der Java-Programmierung verwendet. Das static Keyword in Java wird genutzt, um eine Klassenlevel-Variable in Java zu erstellen. Static Variablen und Methoden sind Teil der Klasse, nicht der Instanzen der Klasse.
Verwendung des static Keywords in Java
Java static, static Keyword in JavaJava static Keyword kann in fünf Bereichen verwendet werden.
- static Variablen
static int count; - static Methoden
static void foo() {} - static Block
static{
//etwas Code
} - static innere Klasse
class Test {
static class InnerStatic{}
} - Interface static Methode (ab Java 8)
Wir werden hier vier davon besprechen.
Java Static Variable
Wir können das static Keyword mit einer Klassenlevel-Variable verwenden. Eine static Variable ist eine Klassenvariable und gehört nicht zum Objekt/Instanz der Klasse. Da static Variablen über alle Instanzen des Objekts geteilt werden, sind sie nicht threadsicher. Normalerweise werden static Variablen zusammen mit dem Keyword final für gemeinsame Ressourcen oder Konstanten verwendet, die von allen Objekten genutzt werden können. Wenn die static Variable nicht privat ist, können wir darauf mit ClassName.variableName zugreifen
//Beispiel für eine static Variable
private static int count;
public static String str;
public static final String DB_USER = "myuser";
Java Static Methode
Genauso wie die static Variable gehört die static Methode zur Klasse und nicht zu Klasseninstanzen. Eine static Methode kann nur auf static Variablen der Klasse zugreifen und nur static Methoden der Klasse aufrufen. Normalerweise sind static Methoden Dienstprogrammmethoden, die wir anderen Klassen zur Verwendung freigeben möchten, ohne eine Instanz erstellen zu müssen. Zum Beispiel Collections-Klasse. Java-Wrapperklassen und Dienstprogrammklassen enthalten viele static Methoden. Die main()-Methode, die der Einstiegspunkt eines Java-Programms ist, ist ebenfalls eine static Methode.
//Beispiel für eine static Methode
public static void setCount(int count) {
if(count > 0)
StaticExample.count = count;
}
//statische Dienstprogrammmethode
public static int addInts(int i, int...js){
int sum=i;
for(int x : js) sum+=x;
return sum;
}
Ab Java 8 können wir auch static Methoden in Interfaces haben.
Java Static Block
Der Java static Block ist die Gruppe von Anweisungen, die ausgeführt wird, wenn die Klasse vom Java ClassLoader in den Speicher geladen wird. Der static Block wird verwendet, um die static Variablen der Klasse zu initialisieren. Meistens wird er verwendet, um static Ressourcen zu erstellen, wenn die Klasse geladen wird. Wir können in einem static Block nicht auf nicht-static Variablen zugreifen. Wir können mehrere static Blöcke in einer Klasse haben, obwohl das nicht viel Sinn macht. Der Code des static Blocks wird nur einmal ausgeführt, wenn die Klasse in den Speicher geladen wird.
static{
//kann verwendet werden, um Ressourcen zu initialisieren, wenn die Klasse geladen wird
System.out.println("StaticExample static block");
//kann nur auf static Variablen und Methoden zugreifen
str="Test";
setCount(2);
}
Java Static Klasse
Wir können das static Keyword mit verschachtelten Klassen verwenden. Das static Keyword kann nicht mit Top-Level-Klassen verwendet werden. Eine static verschachtelte Klasse ist genauso wie jede andere Top-Level-Klasse und ist nur aus Gründen der Verpackung verschachtelt. Lesen Sie: Java Verschachtelte Klassen
Beispielprogramm: StaticExample.java
package com.journaldev.misc;
public class StaticExample {
//static block
static{
//kann verwendet werden, um Ressourcen zu initialisieren, wenn die Klasse geladen wird
System.out.println("StaticExample static block");
//kann nur auf static Variablen und Methoden zugreifen
str="Test";
setCount(2);
}
//mehrere static Blöcke in derselben Klasse
static{
System.out.println("StaticExample static block2");
}
//Beispiel für eine static Variable
private static int count; //privat gehalten, um seinen Wert über Setter zu steuern
public static String str;
public int getCount() {
return count;
}
//Beispiel für eine static Methode
public static void setCount(int count) {
if(count > 0)
StaticExample.count = count;
}
//statische Dienstprogrammmethode
public static int addInts(int i, int...js){
int sum=i;
for(int x : js) sum+=x;
return sum;
}
//Beispiel für eine static Klasse - nur aus Verpackungsgründen verwendet
public static class MyStaticClass{
public int count;
}
}
Beispiel Testprogramm: TestStatic.java
package com.journaldev.misc;
public class TestStatic {
public static void main(String[] args) {
StaticExample.setCount(5);
//nicht-private static Variablen können mit dem Klassennamen zugegriffen werden
StaticExample.str = "abc";
StaticExample se = new StaticExample();
System.out.println(se.getCount());
//Klassen- und Instanzstatic Variablen sind gleich
System.out.println(StaticExample.str +" ist dasselbe wie "+se.str);
System.out.println(StaticExample.str == se.str);
//static verschachtelte Klassen sind wie normale Top-Level-Klassen
StaticExample.MyStaticClass myStaticClass = new StaticExample.MyStaticClass();
myStaticClass.count=10;
StaticExample.MyStaticClass myStaticClass1 = ein neuer StaticExample.MyStaticClass();
myStaticClass1.count=20;
System.out.println(myStaticClass.count);
System.out.println(myStaticClass1.count);
}
}
Die Ausgabe des obigen Beispiels für das static Keyword in Java ist:
StaticExample static block
StaticExample static block2
5
abc ist dasselbe wie abc
true
10
20
Beachten Sie, dass der Code des static Blocks zuerst und nur einmal ausgeführt wird, sobald die Klasse in den Speicher geladen wird. Die anderen Ausgaben sind selbsterklärend.
Java Static Import
Normalerweise greifen wir auf static Mitglieder unter Verwendung des Klassennamens zu. Ab Java 1.5 können wir den Java static Import verwenden, um den Klassennamen zu vermeiden. Unten ist ein einfaches Beispiel für 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); //normalerweise A.MAX
foo(); // normalerweise A.foo()
}
}
Beachten Sie die Importanweisungen, für static Import müssen wir import static gefolgt vom voll qualifizierten static Mitglied einer Klasse verwenden. Um alle static Mitglieder einer Klasse zu importieren, können wir * wie in import static com.journaldev.test.A.*; verwenden. Wir sollten es in dieser Anleitung nur verwenden, wenn wir das static Mitglied einer Klasse mehrmals verwenden, es ist nicht gut für die Lesbarkeit.