0Pricing
Java Academy · Lektion

Klasseninspektion mit Reflection

Rufen Sie Class-Objekte ab und untersuchen Sie zur Laufzeit Felder, Methoden, Konstruktoren und Annotationen.

Klasseninspektion mit Reflection ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist Reflection?

Reflection ermöglicht es einem Java-Programm, seine eigene Struktur zur Laufzeit zu untersuchen und zu verändern – etwa Klassennamen, Felder, Methoden, Konstruktoren und Anmerkungen auszulesen, ohne sie zur Compile-Zeit zu kennen.

Ein Class-Objekt abrufen

Rufen Sie ein Class<?>-Objekt über das Klassenliteral, getClass() oder Class.forName() ab.

Class<String> c1 = String.class;           // literal
Class<?> c2 = "hello".getClass();           // from instance
Class<?> c3 = Class.forName("java.util.ArrayList"); // by name

Klassenmetadaten untersuchen

Lesen Sie den Klassennamen, das Package, die Oberklasse und die implementierten Interfaces aus dem Class-Objekt aus.

Class<?> c = ArrayList.class;
System.out.println(c.getName());           // java.util.ArrayList
System.out.println(c.getSimpleName());     // ArrayList
System.out.println(c.getSuperclass());     // class java.util.AbstractList
for (Class<?> iface : c.getInterfaces()) System.out.println(iface.getName());

Deklarierte Felder auflisten

getDeclaredFields() gibt alle in der Klasse deklarierten Felder zurück, einschließlich privater Felder. getFields() gibt nur öffentliche Felder zurück, einschließlich geerbter Felder.

for (Field f : User.class.getDeclaredFields()) {
    System.out.printf("%-10s %s%n", f.getType().getSimpleName(), f.getName());
}

Methoden auflisten

getDeclaredMethods() listet alle Methoden unabhängig von ihrer Sichtbarkeit auf. Verwenden Sie getMethods() für öffentliche Methoden einschließlich geerbter Methoden.

for (Method m : String.class.getDeclaredMethods()) {
    System.out.println(m.getName() + " -> " + m.getReturnType().getSimpleName());
}

Methodenparameter untersuchen

Rufen Sie Parametertypen, Parameternamen (erfordert das Compiler-Flag -parameters) und Anmerkungen ab.

Method m = UserService.class.getDeclaredMethod("findById", Long.class);
for (Parameter p : m.getParameters()) {
    System.out.println(p.getType().getSimpleName() + " " + p.getName());
}

Konstruktoren auflisten

Untersuchen Sie Konstruktoren genauso wie Methoden. getDeclaredConstructors() umfasst auch private Konstruktoren, wie sie in Singletons oder Buildern verwendet werden.

for (Constructor<?> c : User.class.getDeclaredConstructors()) {
    System.out.println(Arrays.toString(c.getParameterTypes()));
}

Anmerkungen auslesen

Rufen Sie Anmerkungen einer Klasse, Methode oder eines Feldes ab. Prüfen Sie mit isAnnotationPresent, ob eine Anmerkung vorhanden ist, und lesen Sie ihren Wert mit getAnnotation aus.

@RestController
@RequestMapping("/users")
public class UserController {}

// Inspection:
RequestMapping rm = UserController.class.getAnnotation(RequestMapping.class);
if (rm != null) System.out.println("Path: " + Arrays.toString(rm.value()));

Modifier prüfen

Verwenden Sie Modifier.isPublic(), isStatic(), isFinal() usw. auf den Modifiern von Feldern, Methoden oder Klassen, um nach Sichtbarkeit zu filtern.

for (Field f : User.class.getDeclaredFields()) {
    int mod = f.getModifiers();
    if (Modifier.isPrivate(mod)) System.out.println("private: " + f.getName());
}

Prüfung mit isAssignableFrom und instanceof

Verwenden Sie Class.isAssignableFrom(), um die Typkompatibilität programmgesteuert zu prüfen – dies entspricht instanceof, verwendet jedoch Class-Objekte, die erst zur Laufzeit bekannt sind.

Class<?> parent = Collection.class;
Class<?> child  = ArrayList.class;
System.out.println(parent.isAssignableFrom(child)); // true
System.out.println(child.isAssignableFrom(parent));  // false

Leistungshinweis

Reflection ist beim einfachen Zugriff auf Felder oder Methoden 10- bis 50-mal langsamer als direkter Code. Cachen Sie Field- und Method-Objekte, rufen Sie setAccessible(true) einmal auf und verwenden Sie die Objekte anschließend wieder.

private static final Field NAME_FIELD;
static {
    try { NAME_FIELD = User.class.getDeclaredField("name"); NAME_FIELD.setAccessible(true); }
    catch (NoSuchFieldException e) { throw new RuntimeException(e); }
}

Schnelltest

Welche Methode gibt private Felder einer Klasse zurück, jedoch keine geerbten?

Zusammenfassung

Rufen Sie Class über Klassenliterale oder forName() ab. Verwenden Sie getDeclaredFields/Methods/Constructors für die Untersuchung aller Mitglieder unabhängig von ihrer Sichtbarkeit. Lesen Sie Anmerkungen mit getAnnotation aus. Cachen Sie Reflection-Objekte, um die Leistung zu verbessern.

Häufig gestellte Fragen

Ist die Lektion „Klasseninspektion mit Reflection“ kostenlos?

Ja — der vollständige Text von „Klasseninspektion mit Reflection“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Klasseninspektion mit Reflection“?

Rufen Sie Class-Objekte ab und untersuchen Sie zur Laufzeit Felder, Methoden, Konstruktoren und Annotationen. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Java Academy zu starten?

Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Klasseninspektion mit Reflection“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?

Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Klasseninspektion mit Reflection
  2. Methoden aufrufen und auf Felder zugreifen
  3. Dynamische Proxies mit InvocationHandler
  4. Reflection-Performance und Alternativen
← Zurück zu Java Academy