Mit dem Java-Operator in­s­tance­of über­prü­fen Sie die Über­ein­stim­mung zwischen einem Objekt und einer Klasse. Der Operator liefert diese In­for­ma­ti­on in Form einer boolschen Aussage, also „true“ oder „false“. Durch die Über­prü­fung können Sie Feh­ler­mel­dun­gen vermeiden.

Was ist in­s­tance­of in Java?

Nicht alle Variablen in Java sind so spe­zi­fisch, dass ihre Be­schaf­fen­heit sofort er­sicht­lich ist. Gerade wenn in der Pro­gram­mier­spra­che ein um­fang­rei­ches Projekt mit zahl­rei­chen Variablen erstellt wird, können zum Beispiel Input-Daten dafür sorgen, dass eine Variable am Ende als eines von mehreren Objekten erscheint. Aus diesem Grund stellt Java den in­s­tance­of-Operator zur Verfügung. Dieser stellt sicher, dass die Instanz (engl. „instance“) einer Re­fe­renz­va­ria­blen auch tat­säch­lich mit einer Klasse, Un­ter­klas­se oder Schnitt­stel­le über­ein­stimmt. Ist dies der Fall, gibt der Operator den boolschen Wert „true“ (wahr) aus. Gibt es keine Über­ein­stim­mung, lautet die Ausgabe „false“ (unwahr).

Ins­be­son­de­re bevor ein un­be­kann­tes Objekt um­ge­wan­delt wird, sollte unbedingt Java in­s­tance­of durch­ge­führt werden, um si­cher­zu­ge­hen, dass das Objekt zur an­ge­nom­me­nen Klasse gehört. Ohne diesen Si­cher­heits­check kann es ansonsten vorkommen, dass eine ClassCastEx­cep­ti­on aus­ge­ge­ben wird. Diese entsteht, wenn ein Objekt in eine andere Klasse um­ge­wan­delt werden soll. Die Feh­ler­mel­dung kann gerade in einem längeren Code für Ver­wir­rung und Probleme sorgen, weshalb eine früh­zei­ti­ge Ab­si­che­rung ratsam ist.

Web­hos­ting
Das beste Web­hos­ting zum Spit­zen­preis
  • 3x schneller und 60 % günstiger
  • Maximale Ver­füg­bar­keit mit > 99.99 %
  • Nur bei IONOS: Bis zu 500 GB Spei­cher­platz inklusive

Funk­ti­ons­wei­se und Syntax

Wenn Sie in­s­tance­of in Java durch­füh­ren, ver­gleicht der Operator eine Re­fe­renz­va­ria­ble mit einer be­stimm­ten Klasse, die Sie ebenfalls angeben. Er trifft keine weiteren Aussagen über die Be­schaf­fen­heit des Objekts oder der Klasse, sondern bestimmt lediglich, ob eine Über­ein­stim­mung besteht oder nicht. Auch die Syntax ist dem­entspre­chend sehr einfach. Sie sieht fol­gen­der­ma­ßen aus:

(objekt) instanceof (klasse)
java

Ist (objekt) eine Instanz von (klasse) wird „true“ aus­ge­spielt. Ist dies nicht der Fall, erscheint „false“.

Einfaches Beispiel für einen in­s­tance­of-Operator in Java

Am ein­fachs­ten lässt sich Java in­s­tance­of und seine Funk­ti­ons­wei­se mit einem kurzen Beispiel ver­an­schau­li­chen. Dafür erstellen wir zunächst eine Klasse namens „Tier“.

public class Tier {
}
java

Im nächsten Schritt erweitern (engl. „extend“) wir diese Klasse um eine Un­ter­klas­se namens „Katze“.

public class Katze extends Tier {
}
java

Nun können wir Java in­s­tance­of nutzen, um zu über­prü­fen, ob eine Instanz von „Katze“ zur Klasse „Tier“ gehört. Dafür nutzen wir die folgenden Zeilen und geben Sie mit dem Java-Befehl System.out.println aus:

public class Tier {}
public class Katze extends Tier {
public static void main(String args []{
Katze Katze = new Katze();
System.out.println(Katze instanceof Tier);
}
}
java

Die Ausgabe sollte so aussehen:

true
java

Mehrere Ebenen und die Object-Klasse

Das Prinzip funk­tio­niert auch mit der Main-Klasse und weiteren Un­ter­klas­sen. Zur Ver­an­schau­li­chung wählen wir ein weiteres Beispiel mit mehreren Ebenen und erweitern den Operator in­s­tance­of in Java um die Anweisung if-else. Bei den Texten hinter den zwei Quer­stri­chen handelt es sich um Java Comments, die lediglich die einzelnen Schritte erläutern, für die Ausgabe aber keine Rolle spielen.

// Klasse 1
// Oberklasse
public class Tier {
}
// Klasse 2
// Unterklasse
class Katze extends Tier {
}
// Klasse 3
// Main-Klasse
class Main {
public static void main(String[] args)
Katze Katze1 = new Katze();
if (Katze1 instanceof Katze)
	System.out.println ("Katze1 ist eine Instanz von Katze");
else
	System.out.println ("Katze1 ist KEINE Instanz von Katze");
if (Katze1 instanceof Tier)
	System.out.println ("Katze1 ist eine Instanz von Tier");
else
	System.out.println ("Katze1 ist KEINE Instanz von Tier");
if (Katze1 instanceof Object)
	System.out.println ("Katze1 ist eine Instanz von Object");
else
	System.out.println ("Katze1 ist KEINE Instanz von Object);
	}
}
java

Da in unserem Beispiel „Katze1“ eine Instanz der Klasse „Katze“ und der Ober­klas­se „Tier“ ist, werden beide Abfragen mit „true“ be­ant­wor­tet. Da Object bzw. die Klasse „java.lang.Object“ in der Hier­ar­chie ganz oben steht, ist „Katze1“ außerdem eine Instanz von Object. Der Java in­s­tance­of Operator wird somit immer „true“ ausgeben, wenn er mit der Object-Klasse an­ge­wen­det wird. Die ent­spre­chen­de Ausgabe sieht daher so aus:

Katze1 ist eine Instanz von Katze
Katze1 ist eine Instanz von Tier
Katze1 ist eine Instanz von Object
java

Ausgabe bei einem Null-Wert

Wenn eine Variable den Wert 0 hat, also kein Objekt enthält, gibt der Java Operator in­s­tance­of au­to­ma­tisch „false“ aus. Dies können Sie mit dem folgenden Beispiel über­prü­fen:

class Katze {
}
class Main {
public static void main(String[] args)
{
Katze Katze2 = null;
if (Katze2 instanceof Katze)
	System.out.println ("Katze1 ist eine Instanz von Katze");
else
	System.out.println ("Katze1 ist KEINE Instanz von Katze");
	}
}
java

Die passende Ausgabe lautet in diesem Fall:

Katze1 ist KEINE Instanz von Katze
java

Ober­klas­sen sind keine Instanz einer unteren Klasse

Während in der Hier­ar­chie Objekte in Un­ter­klas­sen auch zu den über­ge­ord­ne­ten Klassen gehören, funk­tio­niert dieses Prinzip an­ders­her­um nicht. In unserem folgenden Beispiel können wir dies ver­an­schau­li­chen:

class Tier {
}
class Katze extends Tier {
}
class Main {
public static void main(String[] args)
{
Tier Bello = new Tier ();
if (Bello instanceof Katze)
	System.out.println ("Bello ist eine Instanz von Katze");
else
	System.out.println ("Bello ist KEINE Instanz von Katze");
	}
}
java

Die Ausgabe lautet in diesem Fall:

Bello ist KEINE Instanz von Katze
java

Feh­ler­mel­dung bei fehlender Ver­bin­dung

Wenn es keine Ver­bin­dung zwischen dem Objekt und der Klasse, mit der es ver­gli­chen werden soll, gibt, wird eine Feh­ler­mel­dung aus­ge­ge­ben. Auch das zeigen wir an einem Beispiel und erstellen eine neue Klasse namens „Hund“, die zwar zur Ober­klas­se „Tier“ gehört, al­ler­dings in keiner Ver­bin­dung zu „Katze“ steht.

class Hund implements Tier {
}
class Main {
public static void main(String[] args)
{
Katze Katze3 = new Katze ();
System.out.println (Katze3 instanceof Hund);
	}
}
java

In diesem Fall erhalten wir eine Feh­ler­mel­dung, die uns darauf hinweist, dass zwischen den Klassen „Katze“ und „Hund“ keinerlei Ver­bin­dung besteht. Diese Meldung sieht so aus:

java.lang.Error: Unresolved compilation problem:
Incompatible conditional operand types Katze and Hund
java
Tipp

In unserem Digital Guide finden Sie weitere spannende Tutorials und in­for­ma­ti­ve Artikel zu Java. Wir ver­glei­chen zum Beispiel Java und Ja­va­Script und stellen Java und Python gegenüber. Wenn Sie mehr über Java Bitwise Operators erfahren möchten, haben wir ebenfalls den passenden Leitfaden.

58ae44c97ddd65c04c28258d57ac2e42

341cbc51f31aa6f9652128aaf175d3f6

Zum Hauptmenü