what is static keyword java
In diesem Lernprogramm werden statische Schlüsselwörter in Java und ihre Verwendung in Variablen, Methoden, Blöcken und Klassen erläutert. Gibt auch den Unterschied zwischen statischen und nicht statischen Elementen an:
Java unterstützt verschiedene Arten von Deklarationen, um den Umfang und das Verhalten seiner Variablen, Methoden, Klassen usw. anzugeben. Zum Beispiel, Das Schlüsselwort final, versiegelt, statisch usw. Alle diese Deklarationen haben eine bestimmte Bedeutung, wenn sie im Java-Programm verwendet werden.
Wir werden alle diese Schlüsselwörter untersuchen, während wir mit diesem Tutorial fortfahren. Hier werden wir die Details eines der wichtigsten Schlüsselwörter in Java diskutieren, d. H. 'Statisch'.
Was du lernen wirst:
- Statisches Schlüsselwort In Java
- Fazit
Statisches Schlüsselwort In Java
Ein Mitglied in einem Java-Programm kann mit dem Schlüsselwort 'static' vor seiner Deklaration / Definition als statisch deklariert werden. Wenn ein Mitglied als statisch deklariert wird, bedeutet dies im Wesentlichen, dass das Mitglied von allen Instanzen einer Klasse gemeinsam genutzt wird, ohne Kopien pro Instanz zu erstellen.
Daher ist static ein in Java verwendeter Modifikator, der keine Klasse ist und auf die folgenden Mitglieder angewendet werden kann:
- Variablen
- Methoden
- Blöcke
- Klassen (genauer gesagt verschachtelte Klassen)
Wenn ein Mitglied als statisch deklariert ist, kann ohne Verwendung eines Objekts darauf zugegriffen werden. Dies bedeutet, dass das statische Element aktiv und zugänglich ist, bevor eine Klasse instanziiert wird. Im Gegensatz zu anderen nicht statischen Klassenmitgliedern, die nicht mehr existieren, wenn das Objekt der Klasse den Gültigkeitsbereich verlässt, ist das statische Mitglied offensichtlich immer noch aktiv.
Statische Variable in Java
Eine Mitgliedsvariable einer Klasse, die als statisch deklariert ist, wird als statische Variable bezeichnet. Es wird auch als 'Klassenvariable' bezeichnet. Sobald die Variable als statisch deklariert ist, wird der Speicher nur einmal und nicht jedes Mal zugewiesen, wenn eine Klasse instanziiert wird. Daher können Sie auf die statische Variable zugreifen, ohne auf ein Objekt zu verweisen.
Das folgende Java-Programm zeigt die Verwendung statischer Variablen:
class Main { // static variables a and b static int a = 10; static int b; static void printStatic() { a = a /2; b = a; System.out.println('printStatic::Value of a : '+a + ' Value of b : '+b); } public static void main(String() args) { printStatic(); b = a*5; a++; System.out.println('main::Value of a : '+a + ' Value of b : '+b); } } Ausgabe:

Im obigen Programm haben wir zwei statische Variablen, d. H. A und b. Wir modifizieren diese Variablen in einer Funktion 'printStatic' sowie in 'main'. Beachten Sie, dass die Werte dieser statischen Variablen funktionsübergreifend beibehalten werden, auch wenn der Funktionsumfang endet. Die Ausgabe zeigt die Werte von Variablen in zwei Funktionen.
Warum brauchen wir statische Variablen und wo sind sie nützlich?
Statische Variablen sind am nützlichsten in Anwendungen, die Zähler benötigen. Wie Sie wissen, geben Zähler falsche Werte aus, wenn sie als normale Variablen deklariert werden.
Zum Beispiel, wenn Sie eine normale Variable als Zähler in einer Anwendung festgelegt haben, die eine Klasse hat, z. B. Auto. Wenn wir dann ein Autoobjekt erstellen, wird die normale Zählervariable mit jeder Instanz initialisiert. Wenn wir jedoch eine Zählervariable als statische Variable oder Klassenvariable haben, wird sie beim Erstellen der Klasse nur einmal initialisiert.
Später, bei jeder Instanz der Klasse, wird dieser Zähler um eins erhöht. Dies ist anders als bei der normalen Variablen, bei der bei jeder Instanz der Zähler inkrementiert wird, der Wert des Zählers jedoch immer 1 ist.
Selbst wenn Sie hundert Objekte des Klassenwagens erstellen, hat der Zähler als normale Variable immer den Wert 1, während er bei einer statischen Variablen die korrekte Anzahl von 100 anzeigt.
Im Folgenden finden Sie ein weiteres Beispiel für statische Zähler in Java:
class Counter { static int count=0;//will get memory only once and retain its value Counter() { count++;//incrementing the value of static variable System.out.println(count); } } class Main { public static void main(String args()) { System.out.println('Values of static counter:'); Counter c1=new Counter(); Counter c2=new Counter(); Counter c3=new Counter(); } } Ausgabe:

Die Funktionsweise der statischen Variablen ist im obigen Programm ersichtlich. Wir haben die Anzahl der statischen Variablen mit dem Anfangswert = 0 deklariert. Dann erhöhen wir im Konstruktor der Klasse die statische Variable.
In der Hauptfunktion erstellen wir drei Objekte des Klassenzählers. Die Ausgabe zeigt den Wert der statischen Variablen jedes Mal, wenn das Zählerobjekt erstellt wird. Wir sehen, dass mit jedem erstellten Objekt der vorhandene statische Variablenwert erhöht und nicht neu initialisiert wird.
Statische Java-Methode
Eine Methode in Java ist statisch, wenn das Schlüsselwort 'static' vorangestellt ist.
Einige Punkte, die Sie bei der statischen Methode beachten müssen, sind:
wie man einen Testplan erstellt
- Eine statische Methode gehört zur Klasse im Gegensatz zu anderen nicht statischen Methoden, die mit der Instanz einer Klasse aufgerufen werden.
- Zum Aufrufen einer statischen Methode benötigen Sie kein Klassenobjekt.
- Auf die statischen Datenelemente der Klasse kann die statische Methode zugreifen. Die statische Methode kann sogar die Werte des statischen Datenelements ändern.
- Eine statische Methode kann keinen Verweis auf 'this' - oder 'super' -Mitglieder haben. Selbst wenn eine statische Methode versucht, sie zu referenzieren, handelt es sich um einen Compilerfehler.
- Genau wie statische Daten kann die statische Methode auch andere statische Methoden aufrufen.
- Eine statische Methode kann nicht auf nicht statische Datenelemente oder Variablen verweisen und auch keine nicht statischen Methoden aufrufen.
Das folgende Programm zeigt die Implementierung der statischen Methode in Java:
class Main { // static method static void static_method() { System.out.println('Static method in Java...called without any object'); } public static void main(String() args) { static_method(); } } Ausgabe:

Dies ist eine einfache Illustration. Wir definieren eine statische Methode, die einfach eine Nachricht druckt. Dann wird in der Hauptfunktion die statische Methode ohne Objekt oder Instanz einer Klasse aufgerufen.
Ein weiteres Beispiel für die Implementierung statischer Schlüsselwörter in Java.
class Main { // static variable static int count_static = 5; // instance variable int b = 10; // static method static void printStatic() { count_static = 20; System.out.println('static method printStatic'); // b = 20; // compilation error 'error: non-static variable b cannot be referenced from a static context' //inst_print(); // compilation error 'non-static method inst_print() cannot be referenced from a static //context' //System.out.println(super.count_static); // compiler error 'non-static variable super cannot be //referenced from a static context' } // instance method void inst_print() { System.out.println('instance method inst_print'); } public static void main(String() args) { printStatic(); } } Wie Sie sehen, haben wir im obigen Programm zwei Methoden. Die Methode printStatic ist eine statische Methode, während inst_print eine Instanzmethode ist. Wir haben auch zwei Variablen, static_count ist eine statische Variable und b ist eine Instanzvariable.
In der statischen Methode - printStatic zeigen wir zuerst eine Nachricht an und versuchen dann, den Wert der Instanzvariablen b zu ändern und rufen auch die nicht statische Methode auf.
Als Nächstes versuchen wir, das Schlüsselwort 'super' zu verwenden.
b = 20;
inst_print ();
System.out.println (super.count_static);
Wenn wir das Programm mit den obigen Zeilen ausführen, erhalten wir Kompilierungsfehler für die Verwendung von Instanzvariablen, das Aufrufen nicht statischer Methoden und das Verweisen von Super in einem statischen Kontext. Dies sind die Einschränkungen der statischen Methode.
Wenn wir die obigen drei Zeilen kommentieren, funktioniert nur dann das obige Programm einwandfrei und erzeugt die folgende Ausgabe.
Ausgabe:
Überladen und Überschreiben der statischen Methode
Wie Sie alle wissen, sind sowohl Überladen als auch Überschreiben die Merkmale von OOPS und unterstützen den Polymorphismus. Überladen kann als Polymorphismus zur Kompilierungszeit klassifiziert werden, wobei Sie Methoden mit demselben Namen, aber unterschiedlichen Parameterlisten verwenden können.
Das Überschreiben ist ein Merkmal des Laufzeitpolymorphismus. Dabei wird die Basisklassenmethode in der abgeleiteten Klasse überschrieben, sodass die Methodensignatur oder der Prototyp identisch sind, die Definition jedoch unterschiedlich ist.
Lassen Sie uns diskutieren, wie sich Überladen und Überschreiben auf die statische Klasse in Java auswirken.
Überlastung
Sie können eine statische Methode in Java mit verschiedenen Parameterlisten mit demselben Namen überladen.
Das folgende Programm zeigt Überladung:
public class Main { public static void static_method() { System.out.println('static_method called '); } public static void static_method(String msg) { System.out.println('static_method(string) called with ' + msg); } public static void main(String args()) { static_method(); static_method('Hello, World!!'); } } Ausgabe:

Dieses Programm verfügt über zwei statische Methoden mit demselben Namen 'static_method', jedoch einer anderen Argumentliste. Die erste Methode akzeptiert kein Argument und die zweite Methode akzeptiert ein String-Argument.
Beachten Sie, dass Sie die Methode nicht nur abhängig vom Schlüsselwort 'static' überladen können. Zum Beispiel, Wenn Sie eine Instanzmethode 'sum' haben und eine andere Methode 'sum' definieren und als statisch deklarieren, funktioniert dies nicht. Dieser Versuch einer Überladung basierend auf einem 'statischen' Schlüsselwort führt zu einem Kompilierungsfehler.
Überschreiben
Da statische Methoden ohne ein Objekt der Klasse aufgerufen werden, wird sie nicht überschrieben, selbst wenn Sie eine statische Methode mit derselben Signatur in der abgeleiteten Klasse haben. Dies liegt daran, dass es ohne eine Instanz keinen Laufzeitpolymorphismus gibt.
Daher können Sie eine statische Methode nicht überschreiben. Wenn es jedoch überhaupt eine statische Methode mit derselben Signatur in der abgeleiteten Klasse gibt, hängt die aufzurufende Methode nicht von den Objekten zur Laufzeit ab, sondern vom Compiler.
Sie müssen beachten, dass statische Methoden zwar nicht überschrieben werden können, die Java-Sprache jedoch keine Compilerfehler ausgibt, wenn Sie eine Methode in der abgeleiteten Klasse mit derselben Signatur wie eine Basisklassenmethode haben.
Die folgende Implementierung belegt diesen Punkt.
classBase_Class { // Static method in base class which will be hidden in substatic_displayclass public static void static_display() { System.out.println('Base_Class::static_display'); } } classDerived_Class extends Base_Class { public static void static_display() { System.out.println('Derived_Class::static_display'); } } public class Main { public static void main(String args( )) { Base_Class obj1 = new Base_Class(); Base_Class obj2 = new Derived_Class(); Derived_Class obj3 = new Derived_Class(); obj1.static_display(); obj2.static_display(); obj3.static_display(); } } Ausgabe:

Im obigen Programm können Sie sehen, dass die aufgerufene statische Methode nicht davon abhängt, auf welches Objekt der Zeiger zeigt. Dies liegt daran, dass Objekte mit statischen Methoden überhaupt nicht verwendet werden.
Statischer Block in Java
So wie Sie auch in Java Funktionsblöcke in Programmiersprachen wie C ++, C # usw. haben, gibt es einen speziellen Block namens 'statischer' Block, der normalerweise einen Codeblock enthält, der sich auf statische Daten bezieht.
wie man eine .bin Datei ausführt
Dieser statische Block wird zu dem Zeitpunkt ausgeführt, zu dem das erste Objekt der Klasse erstellt wird (genau zum Zeitpunkt des Ladens der Klasse) oder wenn das statische Element innerhalb des Blocks verwendet wird.
Das folgende Programm zeigt die Verwendung eines statischen Blocks.
class Main { static int sum = 0; static int val1 = 5; static int val2; // static block static { sum = val1 + val2; System.out.println('In static block, val1: ' + val1 + ' val2: '+ val2 + ' sum:' + sum); val2 = val1 * 3; sum = val1 + val2; } public static void main(String() args) { System.out.println('In main function, val1: ' + val1 + ' val2: '+ val2 + ' sum:' + sum); } } Ausgabe:

Beachten Sie die Reihenfolge der Ausführung von Anweisungen im obigen Programm. Der Inhalt des statischen Blocks wird zuerst ausgeführt, gefolgt vom Hauptprogramm. Die statischen Variablen sum und val1 haben Anfangswerte, während val2 nicht initialisiert ist (standardmäßig 0). Dann wird im statischen Block val2 noch kein Wert zugewiesen und daher wird sein Wert als 0 angezeigt.
Der Variablen val2 wird nach dem Drucken im statischen Block ein Wert zugewiesen und die Summe neu berechnet. Daher erhalten wir in der Hauptfunktion unterschiedliche Werte von sum und val2.
Wenn Sie einen Konstruktor angeben, wird der Inhalt des statischen Blocks bereits vor dem Konstruktor ausgeführt. Die statischen Blöcke werden hauptsächlich zum Initialisieren statischer Elemente der Klasse und anderer Initialisierungen im Zusammenhang mit statischen Elementen verwendet.
Java Static Class
In Java gibt es statische Blöcke, statische Methoden und sogar statische Variablen. Daher ist es offensichtlich, dass Sie auch statische Klassen haben können. In Java ist es möglich, eine Klasse in einer anderen Klasse zu haben, und dies wird als verschachtelte Klasse bezeichnet. Die Klasse, die die verschachtelte Klasse einschließt, wird als äußere Klasse bezeichnet.
Obwohl Sie in Java eine verschachtelte Klasse als statisch deklarieren können, ist es nicht möglich, die äußere Klasse als statisch zu haben.
Lassen Sie uns nun die statischen verschachtelten Klassen in Java untersuchen.
Statische verschachtelte Klasse in Java
Wie bereits erwähnt, können Sie eine verschachtelte Klasse in Java als statisch deklarieren lassen. Die statisch verschachtelte Klasse unterscheidet sich von der nicht statisch verschachtelten Klasse (innere Klasse) in bestimmten Aspekten, wie unten aufgeführt.
Im Gegensatz zur nicht statischen verschachtelten Klasse benötigt die verschachtelte statische Klasse keine Referenz für die äußere Klasse.
Eine statisch verschachtelte Klasse kann nur auf statische Mitglieder der äußeren Klasse zugreifen, im Gegensatz zu nicht statischen Klassen, die sowohl auf statische als auch auf nicht statische Mitglieder der äußeren Klasse zugreifen können.
Ein Beispiel für eine statisch verschachtelte Klasse ist unten angegeben.
class Main{ private static String str = 'SoftwareTestingHelp'; //Static nested class static class NestedClass{ //non-static method public void display() { System.out.println('Static string in OuterClass: ' + str); } } public static void main(String args()) { Main.NestedClassobj = new Main.NestedClass(); obj.display(); } } Ausgabe:
Was ist die Subnetzmaske für eine IP-Adresse der Klasse B?

Im obigen Programm sehen Sie, dass die statisch verschachtelte Klasse von der äußeren Klasse auf die statische Variable (Zeichenfolge) zugreifen kann.
Statischer Import in Java
Wie Sie wissen, nehmen wir normalerweise verschiedene Pakete und vordefinierte Funktionen in das Java-Programm auf, indem wir die Direktive 'import' verwenden. Wenn Sie das Wort static mit der Importanweisung verwenden, können Sie die Klassenfunktionalität ohne Verwendung des Klassennamens verwenden.
Beispiel:
import static java.lang.System.*; class Main { public static void main(String() args) { //here we import System class using static, hence we can directly use functionality out.println('demonstrating static import'); } } Ausgabe:

In diesem Programm verwenden wir den statischen Import für die Klasse java.lang.System.
Hinweis: In der Hauptfunktion haben wir gerade out.println verwendet, um die Nachricht anzuzeigen.
Obwohl die statische Importfunktion den Code präziser und lesbarer macht, führt dies manchmal zu Mehrdeutigkeiten, insbesondere wenn einige Pakete dieselben Funktionen haben. Daher sollte der statische Import nur verwendet werden, wenn er extrem benötigt wird.
Statisch vs nicht statisch
Lassen Sie uns die Hauptunterschiede zwischen statischen und nicht statischen Java-Mitgliedern diskutieren.
Nachfolgend sind die Unterschiede zwischen aufgeführt Statische und nicht statische Variablen .
| Statische Variablen | Nicht statische Variablen |
|---|---|
| Es kann nur über den Klassennamen zugegriffen werden. | Erfordert den Zugriff auf Objekte einer Klasse. |
| Sind sowohl für statische als auch für nicht statische Methoden zugänglich. | Sind nur für nicht statische Methoden zugänglich. |
| Ein Speicher für statische Variablen wird nur einmal pro Klasse zugewiesen. | Pro Objekt wird ein Speicher für nicht statische Variablen zugewiesen. |
| Von allen Objekten der Klasse geteilt. | Pro Objekt wird eine Kopie der Variablen erstellt. |
| Hat einen globalen Geltungsbereich und steht allen Methoden und Blöcken zur Verfügung. | Hat einen lokalen Bereich und ist für Objekte der Klasse sichtbar. |
Nachstehend ist der Unterschied zwischen statischen und nicht statischen Methoden angegeben .
| Statische Methoden | Nicht statische Methoden |
|---|---|
| Eine Methode, der ein statisches Schlüsselwort vorangestellt ist und die auf Klassenebene verfügbar ist. | Eine Methode, der kein statisches Schlüsselwort vorangestellt ist und die für jede Instanz der Klasse verfügbar ist. |
| Unterstützt die Kompilierungszeit oder die frühzeitige Bindung. | Unterstützt Laufzeit- oder dynamische Bindung. |
| Kann nur auf statische Datenelemente seiner Klasse und auf jede andere Klasse zugreifen. | Kann sowohl auf statische als auch auf nicht statische Mitglieder der Klasse und anderer Klassen zugreifen. |
| Statische Methoden können nicht überschrieben werden. | Kann überschrieben werden. |
| Speicher wird nur einmal zugewiesen. Daher ist der verwendete Speicher geringer. | Der Speicherverbrauch ist höher, da bei jedem Aufruf der Methode Speicher zugewiesen wird. |
Statisch gegen Finale
Statisch und Final sind zwei Schlüsselwörter in Java, die der Entität, mit der sie verwendet wird, eine besondere Bedeutung verleihen können. Zum Beispiel, Wenn eine Variable als statisch deklariert wird, wird sie zu einer Klassenvariablen, auf die ohne Verweis auf das Objekt zugegriffen werden kann.
In ähnlicher Weise wird eine Variable, wenn sie als endgültig deklariert wird, unveränderlich, d. H. Eine Konstante.
Lassen Sie uns einige der Hauptunterschiede zwischen statischen und endgültigen Schlüsselwörtern in Java tabellarisch darstellen.
| Statisch | Finale |
|---|---|
| Ein statisches Datenelement (verschachtelte Klasse, Variable oder Methode) ist ein Datenelement, dem ein statisches Schlüsselwort vorangestellt ist und auf das ohne Objekt zugegriffen werden kann. | Das endgültige Schlüsselwort kann auf eine Variable, Methode, Klasse usw. Angewendet werden. und legt den Unternehmen Beschränkungen auf. |
| Nicht obligatorisch, um die statische Variable während der Deklaration mit einem Wert zu initialisieren. | Es ist erforderlich, dass die endgültige Variable zum Zeitpunkt der Deklaration auf einen Wert initialisiert wird |
| Sie können die statischen Variablen neu initialisieren. | Endvariablen können nicht neu initialisiert werden. |
| Statische Methoden sind solche, die nur auf statische Elemente zugreifen können. | Endgültige Methoden sind Methoden, die nicht vererbt / überschrieben werden können. |
| Statische Klassen sind Klassen, deren Objekte nicht erstellt werden können. | Abschlussklassen sind Klassen, die nicht vererbt werden können. |
Häufig gestellte Fragen
F # 1) Kann Java Class statisch sein?
Antworten: Ja, eine Klasse in Java kann statisch sein, sofern es sich nicht um die äußere Klasse handelt. Dies bedeutet, dass nur verschachtelte Klassen in Java statisch sein können.
F # 2) Wann sollte ich Static in Java verwenden?
Antworten: Wann immer Sie ein Datenelement in Ihrem Programm haben möchten, dessen Wert über die Objekte hinweg erhalten bleiben soll, sollten Sie statisch verwenden. Zum Beispiel, ein Zähler. Eine Methode kann als statisch deklariert werden, wenn Sie sie nicht mit einem Objekt aufrufen möchten.
F # 3) Kann eine statische Klasse einen Konstruktor haben?
Antworten: Ja, eine statische Klasse kann einen Konstruktor haben und dient ausschließlich dazu, statische Datenelemente zu initialisieren. Es wird nur zum ersten Mal aufgerufen, wenn auf die Datenelemente zugegriffen wird. Es wird nicht für den späteren Zugriff aufgerufen.
F # 4) Was ist die Verwendung des statischen Konstruktors?
Antworten: Im Allgemeinen wird der Konstruktor zum Initialisieren statischer Datenelemente verwendet. Es wird auch verwendet, um Operationen / Aktionen auszuführen, die nur einmal ausgeführt werden müssen.
F # 5) Werden statische Methoden in Java geerbt?
Antworten: Ja, statische Methoden in Java werden vererbt, aber nicht überschrieben.
Fazit
In diesem Tutorial haben wir das statische Schlüsselwort von Java sowie seine Verwendung in Datenelementen, Methoden, Blöcken und Klassen ausführlich erläutert. Das statische Schlüsselwort ist ein Schlüsselwort, das verwendet wird, um die Klassenebene oder den globalen Bereich anzugeben.
Sie müssen nicht über Instanzen der Klasse auf statische Mitglieder zugreifen. Sie können über den Klassennamen direkt auf die statischen Datenelemente zugreifen. Wir haben auch die Hauptunterschiede zwischen statischen und nicht statischen Elementen sowie statischen und endgültigen Schlüsselwörtern erörtert.
In unseren folgenden Themen werden wir weitere Schlüsselwörter und ihre Bedeutung in der Java-Sprache untersuchen.
Literatur-Empfehlungen
- Statisch In C ++
- Java Interface und Abstract Class Tutorial mit Beispielen
- Java-Bereitstellung: Erstellung und Ausführung einer Java-JAR-Datei
- Java Virtual Machine: Wie JVM beim Ausführen von Java-Anwendungen hilft
- C # -Konzepte: Konstruktor, Destruktor, statische Klasse, Struktur & Aufzählung
- Zugriffsmodifikatoren in Java - Tutorial mit Beispielen
- Java Reflection Tutorial mit Beispielen
- Einführung in die Java-Programmiersprache - Video-Tutorial
