Der statisches Schlüsselwort in Java wird es hauptsächlich zur Speicherverwaltung verwendet. Das Schlüsselwort static wird in Java verwendet, um dieselbe Variable oder Methode einer bestimmten Klasse gemeinsam zu nutzen. Die Benutzer können statische Schlüsselwörter mit Variablen, Methoden, Blöcken und verschachtelten Klassen anwenden. Das Schlüsselwort static gehört zur Klasse als zu einer Instanz der Klasse. Das Schlüsselwort static wird für eine konstante Variable oder eine Methode verwendet, die für jede Instanz einer Klasse gleich ist.
Der statisch Schlüsselwort ist ein Nichtzugriffsmodifikator in Java, der für Folgendes anwendbar ist:
- Blöcke
- Variablen
- Methoden
- Klassen
Notiz: Um ein statisches Mitglied (Block, Variable, Methode, verschachtelte Klasse) zu erstellen, stellen Sie seiner Deklaration das Schlüsselwort voran statisch .
Merkmale des statischen Schlüsselworts:
Hier sind einige Merkmale des Schlüsselworts static in Java:
- Gemeinsame Speicherzuweisung: Statischen Variablen und Methoden wird während der Ausführung des Programms nur einmal Speicherplatz zugewiesen. Dieser Speicherplatz wird von allen Instanzen der Klasse gemeinsam genutzt, wodurch statische Mitglieder für die Aufrechterhaltung des globalen Status oder gemeinsamer Funktionen nützlich sind. Ohne Objektinstanziierung zugänglich: Auf statische Mitglieder kann zugegriffen werden, ohne dass eine Instanz der Klasse erstellt werden muss. Dies macht sie nützlich für die Bereitstellung von Hilfsfunktionen und Konstanten, die im gesamten Programm verwendet werden können. Mit der Klasse verknüpft, nicht mit Objekten: Statische Mitglieder sind mit der Klasse verknüpft, nicht mit einzelnen Objekten. Dies bedeutet, dass Änderungen an einem statischen Mitglied in allen Instanzen der Klasse widergespiegelt werden und dass Sie auf statische Mitglieder über den Klassennamen und nicht über eine Objektreferenz zugreifen können. Auf nicht statische Mitglieder kann nicht zugegriffen werden: Statische Methoden und Variablen können nicht auf nicht statische Mitglieder einer Klasse zugreifen, da sie keiner bestimmten Instanz der Klasse zugeordnet sind. Kann überladen, aber nicht überschrieben werden: Statische Methoden können überladen werden, was bedeutet, dass Sie mehrere Methoden mit demselben Namen, aber unterschiedlichen Parametern definieren können. Sie können jedoch nicht überschrieben werden, da sie mit der Klasse und nicht mit einer bestimmten Instanz der Klasse verknüpft sind.
Wenn ein Mitglied als statisch deklariert ist, kann auf es zugegriffen werden, bevor Objekte seiner Klasse erstellt werden, und ohne Verweis auf ein Objekt. Im folgenden Java-Programm greifen wir beispielsweise auf die statische Methode zu m1() ohne ein Objekt zu erstellen Prüfen Klasse.
Java
// Java program to demonstrate that a static member> // can be accessed before instantiating a class> class> Test> {> > // static method> > static> void> m1()> > {> > System.out.println(> 'from m1'> );> > }> > public> static> void> main(String[] args)> > {> > // calling m1 without creating> > // any object of class Test> > m1();> > }> }> |
>
>Ausgabe
from m1>
Statische Blöcke
Wenn Sie die Berechnung durchführen müssen, um Ihr zu initialisieren statische Variablen können Sie einen statischen Block deklarieren, der genau einmal ausgeführt wird, wenn die Klasse zum ersten Mal geladen wird.
Betrachten Sie das folgende Java-Programm, das die Verwendung statischer Blöcke demonstriert.
Java
Java-Standardparameter
// Java program to demonstrate use of static blocks> class> Test> {> > // static variable> > static> int> a => 10> ;> > static> int> b;> > > // static block> > static> {> > System.out.println(> 'Static block initialized.'> );> > b = a *> 4> ;> > }> > public> static> void> main(String[] args)> > {> > System.out.println(> 'from main'> );> > System.out.println(> 'Value of a : '> +a);> > System.out.println(> 'Value of b : '> +b);> > }> }> |
>
>Ausgabe
Arten von Binärbäumen
Static block initialized. from main Value of a : 10 Value of b : 40>
Einen ausführlichen Artikel zu statischen Blöcken finden Sie unter Statische Blöcke
Statische Variablen
Wenn eine Variable als statisch deklariert wird, wird eine einzelne Kopie der Variablen erstellt und von allen Objekten auf Klassenebene gemeinsam genutzt. Statische Variablen sind im Wesentlichen globale Variablen. Alle Instanzen der Klasse nutzen dieselbe statische Variable.
Wichtige Punkte für statische Variablen:
- Wir können statische Variablen nur auf Klassenebene erstellen. Siehe hier
- Statische Blöcke und statische Variablen werden in der Reihenfolge ausgeführt, in der sie in einem Programm vorhanden sind.
Unten sehen Sie das Java-Programm, um zu demonstrieren, dass statische Blöcke und statische Variablen in der Reihenfolge ausgeführt werden, in der sie in einem Programm vorhanden sind.
Java
// Java program to demonstrate execution> // of static blocks and variables> class> Test> {> > // static variable> > static> int> a = m1();> > > // static block> > static> {> > System.out.println(> 'Inside static block'> );> > }> > > // static method> > static> int> m1() {> > System.out.println(> 'from m1'> );> > return> 20> ;> > }> > > // static method(main !!)> > public> static> void> main(String[] args)> > {> > System.out.println(> 'Value of a : '> +a);> > System.out.println(> 'from main'> );> > }> }> |
>
>Ausgabe
from m1 Inside static block Value of a : 20 from main>
Statische Methoden
Wenn eine Methode mit deklariert wird statisch Schlüsselwort, es wird als statische Methode bezeichnet. Das häufigste Beispiel für eine statische Methode ist die hauptsächlich( ) Methode. Wie oben erläutert, kann auf jedes statische Mitglied zugegriffen werden, bevor Objekte seiner Klasse erstellt werden, und ohne Verweis auf ein Objekt. Als statisch deklarierte Methoden unterliegen mehreren Einschränkungen:
- Sie können andere statische Methoden nur direkt aufrufen.
- Sie können nur direkt auf statische Daten zugreifen.
- Sie können sich nicht darauf beziehen Das oder super in irgendeiner Weise.
Nachfolgend finden Sie das Java-Programm zur Veranschaulichung der Einschränkungen für statische Methoden.
Java
// Java program to demonstrate restriction on static methods> class> Test> {> > // static variable> > static> int> a => 10> ;> > > // instance variable> > int> b => 20> ;> > > // static method> > static> void> m1()> > {> > a => 20> ;> > System.out.println(> 'from m1'> );> > > // Cannot make a static reference to the non-static field b> > b => 10> ;> // compilation error> > > // Cannot make a static reference to the> > // non-static method m2() from the type Test> > m2();> // compilation error> > > // Cannot use super in a static context> > System.out.println(> super> .a);> // compiler error> > }> > > // instance method> > void> m2()> > {> > System.out.println(> 'from m2'> );> > }> > > > > public> static> void> main(String[] args)> > {> > // main method> > }> }> |
>
>
Ausgabe:
prog.java:18: error: non-static variable b cannot be referenced from a static context b = 10; // compilation error ^ prog.java:22: error: non-static method m2() cannot be referenced from a static context m2(); // compilation error ^ prog.java:25: error: non-static variable super cannot be referenced from a static context System.out.println(super.a); // compiler error ^ prog.java:25: error: cannot find symbol System.out.println(super.a); // compiler error ^ symbol: variable a 4 errors>
Wann werden statische Variablen und Methoden verwendet?
Verwenden Sie die statische Variable für die Eigenschaft, die allen Objekten gemeinsam ist. In der Klasse „Student“ haben beispielsweise alle Schüler denselben Hochschulnamen. Verwenden Sie statische Methoden zum Ändern statischer Variablen.
Betrachten Sie das folgende Java-Programm, das die Verwendung von veranschaulicht statisch Schlüsselwörter mit Variablen und Methoden.
Java
// A java program to demonstrate use of> // static keyword with methods and variables> // Student class> class> Student {> > String name;> > int> rollNo;> > // static variable> > static> String cllgName;> > // static counter to set unique roll no> > static> int> counter => 0> ;> > public> Student(String name)> > {> > this> .name = name;> > this> .rollNo = setRollNo();> > }> > // getting unique rollNo> > // through static variable(counter)> > static> int> setRollNo()> > {> > counter++;> > return> counter;> > }> > // static method> > static> void> setCllg(String name) { cllgName = name; }> > // instance method> > void> getStudentInfo()> > {> > System.out.println(> 'name : '> +> this> .name);> > System.out.println(> 'rollNo : '> +> this> .rollNo);> > // accessing static variable> > System.out.println(> 'cllgName : '> + cllgName);> > }> }> // Driver class> public> class> StaticDemo {> > public> static> void> main(String[] args)> > {> > // calling static method> > // without instantiating Student class> > Student.setCllg(> 'XYZ'> );> > Student s1 => new> Student(> 'Alice'> );> > Student s2 => new> Student(> 'Bob'> );> > s1.getStudentInfo();> > s2.getStudentInfo();> > }> }> |
>
>Ausgabe
Baum- und Graphentheorie
name : Alice rollNo : 1 cllgName : XYZ name : Bob rollNo : 2 cllgName : XYZ>
Statische Klassen
Es kann eine Klasse erstellt werden statisch nur wenn es sich um eine verschachtelte Klasse handelt. Wir können keine Top-Level-Klasse mit einem statischen Modifikator deklarieren, aber verschachtelte Klassen können als statisch deklariert werden. Solche Klassentypen werden als verschachtelte statische Klassen bezeichnet. Eine verschachtelte statische Klasse benötigt keinen Verweis auf die äußere Klasse. In diesem Fall kann eine statische Klasse nicht auf nicht-statische Mitglieder der Outer-Klasse zugreifen.
Notiz: Informationen zu statisch verschachtelten Klassen finden Sie unter a Statische verschachtelte Klasse in Java
Implementierung:
Java
Java-Verbindung MySQL
// A java program to demonstrate use> // of static keyword with Classes> import> java.io.*;> public> class> GFG {> > private> static> String str => 'techcodeview.com'> ;> > // Static class> > static> class> MyNestedClass {> > > // non-static method> > public> void> disp(){> > System.out.println(str);> > }> > }> > > public> static> void> main(String args[])> > {> > GFG.MyNestedClass obj> > => new> GFG.MyNestedClass();> > obj.disp();> > }> }> |
>
>Ausgabe
techcodeview.com>
Hier ist ein Beispiel für ein Java-Programm, das die Verwendung des Schlüsselworts static demonstriert:
Java
public> class> ExampleClass {> > public> static> int> count => 0> ;> > public> int> id;> > public> ExampleClass() {> > count++;> > id = count;> > }> > public> static> void> printCount() {> > System.out.println(> 'Number of instances: '> + count);> > }> > public> void> printId() {> > System.out.println(> 'Instance ID: '> + id);> > }> > public> static> void> main(String[] args) {> > ExampleClass e1 => new> ExampleClass();> > ExampleClass e2 => new> ExampleClass();> > ExampleClass e3 => new> ExampleClass();> > e1.printId();> > e2.printId();> > e3.printId();> > ExampleClass.printCount();> > }> }> |
>
>Ausgabe
Instance ID: 1 Instance ID: 2 Instance ID: 3 Number of instances: 3>
Vorteile:
- Speichereffizienz: Statischen Mitgliedern wird während der Ausführung des Programms nur einmal Speicher zugewiesen, was bei großen Programmen zu erheblichen Speichereinsparungen führen kann. Verbesserte Leistung: Da statische Mitglieder der Klasse und nicht einzelnen Instanzen zugeordnet sind, kann schneller und effizienter auf sie zugegriffen werden als auf nicht statische Mitglieder. Globaler Zugriff: Auf statische Mitglieder kann von überall im Programm aus zugegriffen werden, unabhängig davon, ob eine Instanz der Klasse erstellt wurde. Kapselung von Dienstprogrammmethoden: Statische Methoden können verwendet werden, um Dienstprogrammfunktionen zu kapseln, die keine Statusinformationen von einem Objekt erfordern. Dies kann die Codeorganisation verbessern und die Wiederverwendung von Dienstprogrammfunktionen über mehrere Klassen hinweg erleichtern. Konstanten: Statische Endvariablen können verwendet werden, um Konstanten zu definieren, die im gesamten Programm gemeinsam genutzt werden. Funktionalität auf Klassenebene: Statische Methoden können verwendet werden, um Funktionen auf Klassenebene zu definieren, die keine Statusinformationen von einem Objekt erfordern, wie z. B. Factory-Methoden oder Hilfsfunktionen.
Insgesamt ist das Schlüsselwort static ein leistungsstarkes Tool, das dabei helfen kann, die Effizienz und Organisation Ihrer Java-Programme zu verbessern.