OCAJP – Statische Methoden und Felder

Ich habe im Rahmen der Vermittlung der wichtigsten Java-Konzepte einige Beiträge zu statischen Schlüsselwörtern und statischen Initialisierern veröffentlicht. In diesem Beitrag werde ich die wichtigen Punkte zum statischen Schlüsselwort im Hinblick auf die Vorbereitung auf die OCAJP-Zertifizierungsprüfung erläutern.

Das eigentliche Prüfungsziel ist „6.2 – Wenden Sie das Schlüsselwort static auf Methoden und Felder an” unter dem Thema „Arbeiten mit Methoden und Kapselung“. Dieses Prüfungsziel gilt für beide OCAJP 7 und OCAJP 8. Das Prüfungsziel befasst sich jedoch mit den statischen Methoden und statischen Feldern. Möglicherweise werden Sie in der Prüfung auch auf die Verwendung der statischen Blöcke getestet.

Ich werde alle Fakten und Punkte aufschreiben, die Sie über das Schlüsselwort static in Java wissen müssen. Am Ende dieses Beitrags können Sie einige Musterprüfungsfragen ausprobieren, um Ihr Wissen zu statischen Schlüsselwörtern zu testen. Beachten Sie, dass diese Fragen den echten Prüfungsfragemustern entsprechen.Statische OCAJP-Methoden und -Felder

Was ist ein statisches Schlüsselwort?

In Java sagt Ihnen alles, was als statisch deklariert ist, eines: Die Mitglieder sind einer Klasse zugeordnet und nicht einer Instanz/einem Objekt dieser Klasse. Die ideale Situation, wenn Sie statische Mitglieder deklarieren müssen, besteht darin, dass die Daten von allen Instanzen dieser Klasse gemeinsam genutzt werden müssen.
Schauen Sie sich das folgende Beispiel an:

public class StaticExample {
	private static int i;
	private int j;
	public StaticExample(int j){
		this.j = j;
	}
	static {
		i = 100;
	}
	public static void main(String args[]) {
		StaticExample example1 = new StaticExample(10);
		StaticExample example2 = new StaticExample(20);
		StaticExample.i = 200;
		System.out.println(example1.j);
		System.out.println(example2.j);
		System.out.println(example1.i);
		System.out.println(example2.i);
	}
}

Wenn Sie sich das obige Beispiel genau ansehen:

  • Variable i wird als statisch deklariert und von allen Instanzen der Klasse gemeinsam genutzt StaticExample.
  • Variable j wird als Instanzvariable deklariert, da diese für jede Instanz der Klasse separat ist.
  • Wenn Sie das obige Programm ausführen, erhalten Sie die folgende Ausgabe:
] 
10 
20 
200 
200 

Mit dieser einfachen Erklärung können wir schließen, dass es sich bei static, mit anderen Worten, um eine Klassenhebeldeklaration handelt. Daher ist es äußerst wichtig, zu entscheiden, was auf Klassenebene offengelegt werden soll. In den nächsten Abschnitten lernen wir verschiedene Möglichkeiten kennen, wie wir die statischen Variablen und Methoden in Ihrer Klasse initialisieren können.

In diesem Tutorial werden die folgenden drei Themen näher beleuchtet, die für die Prüfungsvorbereitung wichtiger sind. Ich würde Ihnen raten, so viel wie möglich zu üben, um ein klares Verständnis für die verschiedenen Nutzungskombinationen zu erlangen. In den meisten Prüfungsfragen werden Sie mit falschen Aussagen abgefragt und gefragt, ob das Programm kompiliert werden kann oder nicht.

  • Statische Methoden
  • Statische Felder/Variablen
  • Statische Initialisierer
  • Statische Importe
  • Statische Methoden

    Statische Methoden, auf die auf Klassenebene zugegriffen wird und die von allen Instanzen der Klasse gemeinsam genutzt werden. Statische Methoden werden auf Klassenebene deklariert und weisen die folgenden Eigenschaften auf:

    • Auf statische Methoden kann über den Klassennamen zugegriffen werden und ist zum Erstellen der Instanz nicht erforderlich.
    • Obwohl auf statische Methoden über die Objektreferenz zugegriffen werden kann, wird dies nicht empfohlen.
    • Statische Methoden können überladen, aber nicht überschrieben werden. Das heißt, wenn Sie eine statische Methode in einer Superklasse und einer Unterklasse mit demselben Namen deklarieren, wird der Methodenname der Unterklasse nicht überschrieben. Tatsächlich wird die Methode der Superklasse ausgeblendet und nicht an die Unterklasse vererbt.
    • Konstruktoren können nicht statisch sein.
    • Statische Methoden können nicht auf Instanzvariablen und Instanzmethoden zugreifen.

    Schauen Sie sich das folgende Beispiel für die Verwendung statischer Methoden an:

    public class StaticExample {
    	public static void main(String args[]) {
    		StaticMethods.method(10);
    		StaticMethods.method(10.0);
    		StaticMethodsSub.method(10.0);
    		StaticMethods methods = new StaticMethodsSub();
    		//Here the sub class method is not invoked
    		methods.method(10);
    	}
    }
    class StaticMethods{
    	public static void method(int i){
    		System.out.println("Static int method");
    	}
    	public static void method(double i){
    		System.out.println("Static double method");
    	}	
    }
    class StaticMethodsSub extends StaticMethods{
    	public static void method(int i){
    		System.out.println("Static int sub method");
    	}
    	public static void method(double i){
    		System.out.println("Static double sub method");
    	}	
    }
    

    Die Ausgabe für das obige Programm lautet:

    Static int method
    Static double method
    Static double sub method
    Static int method
    

    Das obige Beispiel vermittelt Ihnen die Grundidee zur Verwendung der statischen Methoden.

    Hier ist die Matrix für die statische Zugriffsbeschränkung für Mitglieder:

    OCAJP-Zugriffsbeschränkung für statische Mitglieder

    Statische Felder/Variablen

    Statische Felder oder Variablen werden mit dem Schlüsselwort static auf Klassenebene deklariert.

    • Eine statische Variable wird von allen Instanzen einer Klasse gemeinsam genutzt.
    • Mit dem neuen Schlüsselwort kann eine Klasse mehrere Instanzen haben. Jede Instanz hat ihre eigenen Instanzvariablen. Die statischen Variablen werden jedoch von allen Instanzen gemeinsam genutzt.
    • Sie müssen die statischen Variablen mit Bedacht verwenden, da dieser Wert mit der gesamten Anwendung geteilt wird, was bei Verwendung in der Umgebung gleichzeitiger Benutzer zu unerwünschten Ergebnissen führen kann.
    • Wenn die Variable nicht als statisch definiert ist, handelt es sich standardmäßig um eine Instanzvariable.

    Sie können sich die anderen Beispiele in diesem Tutorial ansehen, um zu verstehen, wie die statischen Variablen verwendet werden.

    Statische Initialisierer

    Statische Initialisierer sind die statischen Blöcke, die in jeder Java-Klasse mit dem Schlüsselwort static deklariert werden. Dieser Block wird zum Zeitpunkt des Ladens der Klasse ausgeführt. Dieser Block wird zur Initialisierung der statischen Variablen verwendet.

    Im Folgenden sind die wichtigen Merkmale der statischen Blöcke aufgeführt:

  • Innerhalb statischer Blöcke können nur statische Variablen initialisiert werden. Instanzvariablen sind innerhalb statischer Blöcke nicht zulässig.
  • Es können beliebig viele statische Blöcke definiert werden, die in der Reihenfolge der Definition ausgeführt werden.
  • Statische Methoden können von den statischen Initialisierern aufgerufen werden.
  • Statische Blöcke werden zum Initialisieren der statischen Variablen oder Variablen auf Klassenebene verwendet.
  • Statische Initialisierer können keine Instanzmethoden aufrufen oder auf Instanzvariablen verweisen.
  • Sehen Sie sich den folgenden Beispielcode für die Verwendung des statischen Initialisierers an:

    package org;
    
    public class StaticExample {	
    	public static void main(String args[]) throws ClassNotFoundException{
    		//Loading a class
    		StaticInitializer.class.forName("org.StaticInitializer");
    	}
    }
    
    class StaticInitializer{
    	int i;
    	static int j;
    	static{
    		//i = 10; - compiler error. Instance variable not allowed inside static initializer
    		System.out.println("Block 1");
    	}
    	static{
    		j = 20;// This is fine
    		System.out.println("Block 2");
    	}
    	static{
    		System.out.println(j);
    		System.out.println("Block 3");
    		staticmethod();// This is fine
    		//instancemethod(); - compiler error. Instance method not allowed inside static initializer
    	}	
    	public static void staticmethod(){
    		System.out.println("Static method");
    	}
    	public void instancemethod(){
    		System.out.println("Instance method");		
    	}
    }
    

    Die Ausgabe für das obige Programm lautet:

    Block 1
    Block 2
    20
    Block 3
    Static method
    

    Statische Importe

    Statische Importe werden zum Importieren der statischen Mitglieder aus einer beliebigen Klasse oder Schnittstelle verwendet. Bei statischen Importen geht es darum, alle statischen Entitäten – wie statische Klassen, statische Methoden und statische Objekte – zu importieren und direkt im Code darauf zuzugreifen. Dies ist praktisch, da Sie nicht wissen müssen, von wo aus auf die Variablen zugegriffen wird. Sobald Sie statische Importe verwenden, kann der Variablenname oder Methodenname innerhalb dieser Klasse verwendet werden. Diese Funktion wurde als Teil der Java 5.0-Funktionen hinzugefügt.
    Hier ist ein einfaches Beispiel für den statischen Import:

    import static java.lang.Math.*;
    import static java.lang.System.*;
    public class StaticTest {
    	public static void main(String[] args)
    	{
    		gc();
    		out.println("Testing static object");
    		out.println("max of 10 and 20 is " + max(10, 20));
    	}
    }
    

    Im obigen Beispiel werden statische Mitglieder aus den Klassen importiert Math Und System. Später werden die Klassenmitglieder direkt verwendet, ohne den Klassennamen zu verwenden System.gc(). Ich hoffe, dies hilft Ihnen, die Verwendung statischer Importe in Java-Anwendungen zu verstehen.

    OCAJP – Testfragen zu statischen Methoden/Feldern

    Hier sind einige Beispiele für Musterprüfungsfragen, die das Schlüsselwort static verwenden. Wenn Sie weitere Fragen beantworten möchten, kaufen Sie bitte unser OCAJP-Zertifizierungskit.

    1. Welche der folgenden Aussagen sind wahr?

    A. Eine statische Methode kann eine Instanzmethode aufrufen
    B. Eine statische Methode kann keine Instanzmethode aufrufen
    C. Auf statische Variablen kann innerhalb einer Instanzmethode zugegriffen werden
    D. Auf statische Variablen kann nicht innerhalb einer Instanzmethode zugegriffen werden
    E. Die statische Methode kann überschrieben werden

    2. Was wird die Ausgabe des folgenden Programms sein:

    public class StaticExample {
    	private static int j = 10;
    
    	public static void method(int i) {
    		i = 20;
    	}
    
    	public static void main(String args[]) {
    		method(j);
    		System.out.println(j);
    	}
    }
    

    A. 20
    B. 10
    C. 30
    D. Keine Ausgabe
    E. Keines der oben genannten

    3. Betrachten Sie die folgende Klasse:

    class MockExam{
    int i;
       public static void main(String[] args){
           // lot of code.
       }
    }
    

    Welche der folgenden Aussagen sind richtig:

    A. Indem ich i als statisch deklariere, kann main auf this.i zugreifen
    B. Indem ich i als öffentlich deklariere, kann main auf this.i zugreifen
    C. Indem ich i als geschützt deklariere, kann main auf this.i zugreifen
    D. main kann nicht darauf zugreifen.i.
    E. Durch die Deklaration von i als privat kann main auf this.in zugreifen

    Korrekte Antworten:

    1. B, C
    2. B

    Bei Primitiven wie einem int wird der Wert des Primitiven übergeben. Wenn Sie beispielsweise in dieser Frage „i“ an die Methode übergeben, sind Sie es
    tatsächlich wird der Wert 10 an die Methode übergeben, der dann der Methodenvariablen „i“ zugewiesen wird. In der Methode weisen Sie „i“ den Wert 20 zu. Dies ändert jedoch nichts an dem in someInt enthaltenen Wert. someInt enthält immer noch 10. Daher wird 10 gedruckt. Theoretisch unterstützt Java die Wertübergabe für alles (also sowohl für Grundelemente als auch für Objekte). Primitive werden immer als Wert übergeben. Objekt-„Referenzen“ werden als Wert übergeben. Es sieht also so aus, als ob das Objekt vorbeigereicht wird
    Referenz, aber eigentlich ist es der Wert der Referenz, der übergeben wird.

    3. D

    i ist eine Instanzvariable, daher kann innerhalb einer statischen Methode nicht darauf zugegriffen werden. Denken Sie an die Regel, dass statische Methoden und Variablen zum Zeitpunkt des Ladens der Klasse geladen werden. Sie können nicht direkt auf die Instanzvariablen dieser Klasse zugreifen. Beachten Sie außerdem, dass das Schlüsselwort „this“ nicht innerhalb einer statischen Methode verwendet werden kann.

    Kommentar verfassen

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

    Nach oben scrollen