O que é reflexão (reflection) em Java e para que serve?
Olá, colegas! Sou um desenvolvedor Java iniciante, programo nessa linguagem há cerca de seis meses. Ultimamente, tenho encontrado frequentemente o termo "reflection" (reflexão) na documentação e em fóruns. Li alguns artigos, mas não entendi completamente a essência. Expliquem, por favor, em palavras simples: o que é essa tal de reflexão e para que ela serve?
O que me confunde é que em Java estamos acostumados a trabalhar com classes e objetos em tempo de compilação: escrevi uma classe, criei uma instância com new, chamei um método — tudo claro e previsível. Já a reflexão, pelo que entendi, permite "entrar dentro" da classe durante a execução do programa. Para que isso seria necessário? Afinal, se eu conheço a estrutura da classe, posso escrever o código de forma fixa.
Por favor, deem um exemplo concreto onde não seja possível evitar a reflexão. Suponha que exista esta classe simples:
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
private