Reflection leidžia programai tirti ir manipuliuoti klasėmis, metodais ir laukais vykdant — net ir tais, kurie buvo nežinomi kompiliavimo metu. Annotations prideda metaduomenis prie kodo, kuriuos skaito įrankiai ir sistemos (dažnai per reflection) norėdami valdyti elgesį. Kartu jie suteikia galią daugumai Java struktūrų "magijos" (Spring, JPA, JUnit).
Reflection — vykdymo laiko tyrimas ir kvietimas
Class<?> clazz = Class.forName();
(Field field : clazz.getDeclaredFields()) {
System.out.println(field.getName() + + field.getType());
}
(Method method : clazz.getDeclaredMethods()) {
System.out.println(method.getName());
}
clazz.getDeclaredConstructor().newInstance();
clazz.getMethod(, String.class);
m.invoke(instance, );
clazz.getDeclaredField();
f.setAccessible();
