Java Reference
In-Depth Information
Namens) in Form eines Strings. Diesen String kann sich das Programm dynamisch beschaf-
fen (z. B. aus einer Eingabe des Benutzers oder einer Konfi gurationsdatei); zur Zeit des
Programmierens muss die Programmiererin die Klasse nicht kennen:
try
{
Class<?> c = Class.forName("javax.swing.JButton");
}
catch(ClassNotFoundException e)
{
...
}
Wie durch den Try-Catch-Block angedeutet, kann die Methode forName eine ClassNotFound-
Exception werfen, falls sich die als String angegebene Klasse bzw. Schnittstelle nicht im
Classpath des ausführenden Prozesses befi ndet.
Will man auf das Class-Objekt für ein Feld zugreifen, kann man sowohl die Variante mit
.class als auch Class.forName einsetzen. Die folgenden beiden Anweisungen, in denen ein
Zugriff auf ein Class-Objekt für ein zweidimensionales String-Feld bescha wird, sind äqui-
valent, wobei in dem String-Argument der Methode Class.forName die Notation verwendet
wird, die Java intern zur Beschreibung des Typs von Feldern nutzt:
Class<?> c1 = String[][].class;
Class<?> c2 = Class.forName("[[Ljava.lang.String;");
Übrigens erhält man auf beide Arten nicht nur das gleiche, sondern sogar dasselbe Class-
Objekt (d. h. nach Ausführung der beiden Zeilen gilt c1 == c2 und nicht nur c1.equals(c2)).
Auch für Schnittstellen existieren Class-Objekte. Diese lassen sich über .class oder Class.
forName besorgen. Die Variante über ein Objekt und getClass funktioniert nicht, weil hier
immer die Klasse des Objekts zurückgegeben wird (selbst wenn die Variable, auf die get-
Class angewendet wird, den Typ der Schnittstelle hat).
Und auch für die primitiven Datentypen wie boolean, byte und int gibt es entsprechende
Class-Objekte. Der Zugriff darauf lässt sich aber auch in diesem Fall nicht über getClass
bewerkstelligen:
boolean b = true;
Class<?> c = b.getClass(); //Syntaxfehler!!!!
Es funktioniert aber die Variante mit .class:
Class<?> c = boolean.class;
Für die Beschaff ung der Class-Objekte von Feldern primitiver Datentypen gibt es mehrere
Varianten. Sowohl getClass als auch .class sowie Class.forName funktionieren. Die folgen-
den Zeilen zeigen ein Beispiel für die Beschaff ung des Class-Objekts eines dreidimensiona-
len Felds des Typs boolean:
boolean[][][] boolArray = new boolean[10][20][30];
Class<?> c1 = boolArray.getClass();
Class<?> c2 = boolean[][][].class;
Class<?> c3 = Class.forName("[[[Z");
 
Search WWH ::




Custom Search