Unterschied zwischen statischen und finalen Variablen in Java
Dieses Tutorial zeigt die Unterschiede zwischen den Keywords static
und final
. Lassen Sie uns die Unterschiede in tabellarischer Form und anhand von Arbeitsbeispielen diskutieren.
static |
final |
---|---|
Die Initialisierung einer statischen Variablen ist während der Deklaration nicht erforderlich. | Es ist erforderlich, eine finale Variable zu initialisieren, wenn sie deklariert wird. |
Statische Variablen können neu initialisiert werden | Final-Variablen können nicht reinitialisiert werden. |
Es wird mit verschachtelten statischen Klassen, Variablen, Methoden und Blöcken verwendet. | Es wird mit Klassen, Methoden und Variablen verwendet. |
Statische Methoden können nur von anderen statischen Methoden aufgerufen werden. | Endgültige Methoden können nicht von Unterklassen überschrieben werden. |
Statische Variablen in Java
Wenn wir eine statische Variable oder eine Methode erstellen, wird sie an die Klasse und nicht an das Objekt angehängt. Die Variable oder Methode teilt die gleiche Referenz für das gesamte Programm.
Das folgende Programm hat eine Klasse DummyClass
, die eine statische Variable num
und eine statische Methode namens dummyMethod()
enthält. Um auf diese beiden Member von einer anderen Klasse aus zuzugreifen, können wir kein Objekt der DummyClass
erstellen, da sie statisch sind.
Wir rufen sie direkt mit dem Klassennamen auf.
Beispiel:
public class ExampleClass3 {
public static void main(String[] args) {
DummyClass.num = 5;
System.out.println("Static variable value: " + DummyClass.num);
DummyClass.dummyMethod();
}
}
class DummyClass {
public static int num = 0;
public static void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
Ausgabe:
Static variable value: 5
Inside Static Dummy Method
Verschachtelte Klasse mit dem Schlüsselwort static
ohne Bezug auf die äußere Klasse. Wir können eine innere Klasse innerhalb einer Klasse mit dem Schlüsselwort static
erstellen.
Im folgenden Beispiel haben wir eine Klasse DummyClass
und darin erstellen wir eine statische Klasse namens InnerClass
, und in dieser Klasse erstellen wir eine Methode dummyMethod()
.
Nun holen wir uns in der Klasse ExampleClass3
die InnerClass
mit DummyClass.InnerClass
und erstellen ein Objekt der Klasse DummyClass
und rufen die Funktion dummyMethod()
auf.
Beispiel:
public class ExampleClass3 {
public static void main(String[] args) {
DummyClass.InnerClass dummyClassObj = new DummyClass.InnerClass();
dummyClassObj.dummyMethod();
}
}
class DummyClass {
static class InnerClass {
void dummyMethod() {
System.out.println("Inside Static Dummy Method Of The Inner Static Class");
}
}
}
Ausgabe:
Inside Static Dummy Method Of The Inner Static Class
Finale Variablen in Java
Eine finale Variable kann nicht geändert werden, nachdem sie initialisiert wurde. Das Beispiel zeigt, dass wir einen Fehler in der Ausgabe erhalten, wenn wir eine finale Variable erstellen und dann versuchen, sie neu zu initialisieren.
public class ExampleClass3 {
public static void main(String[] args) {
final int num = 0;
num = 1;
}
}
Ausgabe:
java: cannot assign a value to final variable num
Eine andere Klasse kann eine final
Klasse nicht verlängern. Die Verwendung des Schlüsselworts final
beim Erstellen einer Klasse verhindert, dass die Klasse von einer anderen Klasse geerbt wird.
Beispiel:
public class ExampleClass3 {
public static void main(String[] args) {
new DummyClass().dummyMethod();
}
}
final class DummyClass {
public void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
class DummyClass2 extends DummyClass {
public void dummyMethod2() {
System.out.println("Inside Static Dummy Method 2");
}
}
Ausgabe:
java: cannot inherit from final com.tutorial.DummyClass
Wir können eine final
-Methode in einer Unterklasse nicht überschreiben. Wenn eine Funktion das Schlüsselwort final
verwendet, kann sie wie eine finale Klasse nicht von ihren Unterklassen überschrieben werden.
public class ExampleClass3 {
public static void main(String[] args) {
new DummyClass2().dummyMethod();
}
}
class DummyClass {
public final void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
class DummyClass2 extends DummyClass {
public void dummyMethod() {
System.out.println("Inside Overridden Dummy Method");
}
}
Ausgabe:
java: dummyMethod() in com.tutorial.DummyClass2 cannot override dummyMethod() in com.tutorial.DummyClass
overridden method is final
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn