Einführung
In diesem Lab werden Sie lernen, wie Sie in Java überprüfen können, ob ein Objekt einen bestimmten Typ hat, indem Sie den instanceof-Operator verwenden. Sie beginnen damit, die grundlegende Verwendung von instanceof mit verschiedenen Klassen, einschließlich Vererbung, zu verstehen.
Anschließend werden Sie den instanceof-Operator mit verschiedenen Klassentypen testen und untersuchen, wie er sich mit Unterklassen und Oberklassen verhält. Schließlich werden Sie lernen, wie Sie Null-Objekte beim Verwenden von instanceof behandeln, um potenzielle Fehler zu vermeiden.
Verwenden des instanceof-Operators
In diesem Schritt werden Sie über den instanceof-Operator in Java lernen. Der instanceof-Operator wird verwendet, um zu testen, ob ein Objekt eine Instanz einer bestimmten Klasse ist oder ein bestimmtes Interface implementiert. Es ist ein nützliches Werkzeug zum Überprüfen des Typs eines Objekts zur Laufzeit.
Lassen Sie uns ein einfaches Java-Programm erstellen, um zu demonstrieren, wie der instanceof-Operator funktioniert.
Öffnen Sie die Datei
HelloJava.javaim WebIDE-Editor, wenn sie noch nicht geöffnet ist.Ersetzen Sie den gesamten Inhalt der Datei durch folgenden Code:
class Animal { public void makeSound() { System.out.println("Generic animal sound"); } } class Dog extends Animal { public void makeSound() { System.out.println("Woof!"); } } class Cat extends Animal { public void makeSound() { System.out.println("Meow!"); } } public class HelloJava { public static void main(String[] args) { Animal myAnimal = new Dog(); if (myAnimal instanceof Dog) { System.out.println("myAnimal is an instance of Dog"); } if (myAnimal instanceof Cat) { System.out.println("myAnimal is an instance of Cat"); } if (myAnimal instanceof Animal) { System.out.println("myAnimal is an instance of Animal"); } } }In diesem Code:
- Wir definieren eine Basisklasse
Animalund zwei UnterklassenDogundCat. - In der
main-Methode erstellen wir eineAnimal-VariablemyAnimalund weisen ihr einDog-Objekt zu. - Wir verwenden dann den
instanceof-Operator, um zu überprüfen, obmyAnimaleine Instanz vonDog,CatundAnimalist.
- Wir definieren eine Basisklasse
Speichern Sie die Datei (Strg+S oder Cmd+S).
Kompilieren Sie das Programm mit dem
javac-Befehl im Terminal:javac HelloJava.javaFühren Sie das kompilierte Programm mit dem
java-Befehl aus:java HelloJavaSie sollten eine Ausgabe sehen, die anzeigt, welche
instanceof-Prüfungentruezurückgegeben haben.myAnimal is an instance of Dog myAnimal is an instance of AnimalWie Sie sehen können, ist
myAnimaleine Instanz vonDog(weil wir einDog-Objekt erstellt haben) und auch eine Instanz vonAnimal(weilDogeine Unterklasse vonAnimalist). Es ist keine Instanz vonCat.
Testen mit verschiedenen Klassen
Im vorherigen Schritt haben Sie gesehen, wie instanceof mit einer Unterklasse und ihrer Oberklasse funktioniert. Jetzt wollen wir untersuchen, wie es sich verhält, wenn man gegen verschiedene, nicht verwandte Klassen testet.
Wir werden die vorhandene Datei HelloJava.java ändern, um eine weitere Klasse hinzuzufügen und den instanceof-Operator mit Objekten verschiedener Typen zu testen.
Öffnen Sie die Datei
HelloJava.javaim WebIDE-Editor.Fügen Sie der Datei eine neue Klasse namens
Carhinzu. Sie können diese Klassendefinition vor oder nach den KlassenAnimal,DogundCathinzufügen, aber außerhalb der KlasseHelloJava.class Car { public void drive() { System.out.println("Driving a car"); } }Jetzt ändern wir die
main-Methode innerhalb der KlasseHelloJava, um einCar-Objekt zu erstellen und deninstanceof-Operator zu testen. Aktualisieren Sie diemain-Methode so, dass sie wie folgt aussieht:public class HelloJava { public static void main(String[] args) { Animal myAnimal = new Dog(); Car myCar = new Car(); if (myAnimal instanceof Dog) { System.out.println("myAnimal is an instance of Dog"); } if (myAnimal instanceof Cat) { System.out.println("myAnimal is an instance of Cat"); } if (myAnimal instanceof Animal) { System.out.println("myAnimal is an instance of Animal"); } System.out.println("--- Testing Car object ---"); if (myCar instanceof Car) { System.out.println("myCar is an instance of Car"); } if (myCar instanceof Animal) { System.out.println("myCar is an instance of Animal"); } } }Wir haben ein neues
Car-ObjektmyCarhinzugefügt undinstanceof-Prüfungen für es gegenCarundAnimaleingefügt.Speichern Sie die Datei (Strg+S oder Cmd+S).
Kompilieren Sie das geänderte Programm:
javac HelloJava.javaFühren Sie das Programm aus:
java HelloJavaBeobachten Sie die Ausgabe. Sie sollten die Ergebnisse aus dem vorherigen Schritt sehen, gefolgt von den Ergebnissen der neuen Prüfungen für das
Car-Objekt.myAnimal is an instance of Dog myAnimal is an instance of Animal --- Testing Car object --- myCar is an instance of CarDiese Ausgabe bestätigt, dass
myCareine Instanz vonCarist, aber keine Instanz vonAnimal, daCarnicht vonAnimalerbt. Derinstanceof-Operator erkennt korrekt die Typbeziehung (oder deren Fehlen) zwischen Objekten und Klassen.
Umgang mit Null-Objekten
In diesem letzten Schritt werden wir untersuchen, wie sich der instanceof-Operator beim Umgang mit null-Objekten verhält. Das Verständnis davon ist wichtig, um unerwartete Fehler in Ihren Programmen zu vermeiden.
Eine null-Referenz in Java bedeutet, dass eine Variable auf kein Objekt verweist. Wenn Sie den instanceof-Operator mit einer null-Referenz verwenden, gibt er immer false zurück. Dies ist ein integriertes Sicherheitsmerkmal des Operators.
Lassen Sie uns die Datei HelloJava.java ein letztes Mal ändern, um ein null-Objekt einzubeziehen und den instanceof-Operator zu testen.
Öffnen Sie die Datei
HelloJava.javaim WebIDE-Editor.Ändern Sie die
main-Methode innerhalb der KlasseHelloJava, um einenull-Referenz auf einAnimal-Objekt einzubeziehen und diese zu testen. Aktualisieren Sie diemain-Methode so, dass sie wie folgt aussieht:class Animal { public void makeSound() { System.out.println("Generic animal sound"); } } class Dog extends Animal { public void makeSound() { System.out.println("Woof!"); } } class Cat extends Animal { public void makeSound() { System.out.println("Meow!"); } } class Car { public void drive() { System.out.println("Driving a car"); } } public class HelloJava { public static void main(String[] args) { Animal myAnimal = new Dog(); Car myCar = new Car(); Animal nullAnimal = null; // Declare a null Animal reference if (myAnimal instanceof Dog) { System.out.println("myAnimal is an instance of Dog"); } if (myAnimal instanceof Cat) { System.out.println("myAnimal is an instance of Cat"); } if (myAnimal instanceof Animal) { System.out.println("myAnimal is an instance of Animal"); } System.out.println("--- Testing Car object ---"); if (myCar instanceof Car) { System.out.println("myCar is an instance of Car"); } if (myCar instanceof Animal) { System.out.println("myCar is an instance of Animal"); } System.out.println("--- Testing null object ---"); if (nullAnimal instanceof Animal) { System.out.println("nullAnimal is an instance of Animal"); } if (nullAnimal instanceof Dog) { System.out.println("nullAnimal is an instance of Dog"); } } }Wir haben eine neue
Animal-VariablenullAnimalhinzugefügt und sie aufnullinitialisiert. Anschließend führen wirinstanceof-Prüfungen an ihr durch.Speichern Sie die Datei (Strg+S oder Cmd+S).
Kompilieren Sie das Programm:
javac HelloJava.javaFühren Sie das Programm aus:
java HelloJavaBeobachten Sie die Ausgabe. Sie sollten die Ergebnisse aus den vorherigen Schritten sehen, gefolgt von den Ergebnissen der Prüfungen für
nullAnimal.myAnimal is an instance of Dog myAnimal is an instance of Animal --- Testing Car object --- myCar is an instance of Car --- Testing null object ---Beachten Sie, dass die Zeilen innerhalb der
if-Blöcke fürnullAnimalnicht ausgegeben werden. Dies liegt daran, dass sowohlnullAnimal instanceof Animalals auchnullAnimal instanceof Dogzufalseauswerten. Dies zeigt, dass derinstanceof-Operatornull-Referenzen korrekt behandelt, indem erfalsezurückgibt.
Das Verständnis, wie instanceof mit null funktioniert, ist entscheidend für das Schreiben von robustem Java-Code, der NullPointerException-Fehler vermeidet.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie in Java überprüfen können, ob ein Objekt einen bestimmten Typ hat, indem Sie den instanceof-Operator verwenden. Sie haben das Verwenden von instanceof mit verschiedenen Klassen geübt, einschließlich einer Basisklasse und ihrer Unterklassen, um den Laufzeittyp eines Objekts zu bestimmen. Sie haben auch untersucht, wie sich instanceof verhält, wenn Sie gegen die tatsächliche Klasse des Objekts, seine Oberklasse und nicht verwandte Klassen prüfen.



