Demonstração de ClassReflection
Copie o código do código da seguinte forma:
pacote Reflexão;
@Obsoleto
classe pública ReflectionDemo {
private String pri_field;
string pública pub_field;
demonstração de reflexão pública(){}
public ReflectionDemo(Nome da string){}
private ReflectionDemo(String nome,int int1){}
public void ReflectMethod(){}
public void ReflectMethod(String str){}
privado vazio ReflectMethod(int int1){}
classe innerclss_Refection{}
}
Classe de testeReflectionDemoTest
Copie o código do código da seguinte forma:
pacote Reflexão;
importar java.lang.annotation.Annotation;
importar java.lang.reflect.Constructor;
importar java.lang.reflect.Field;
importar java.lang.reflect.Method;
classe pública ReflectionDemoTest {
public static void main(String[] args) {
//Crie um objeto de classe e use modificação genérica para evitar transferência forçada
Classe cla=ReflectionDemo.class;
//Método para obter todos os campos públicos
Campo[] campo=cla.getFields();
for(Campo f:campo){
System.out.println("Método para obter todos os campos públicos:"+f.toString());
}
//Método para obter um domínio público especificado
tentar {
Campo field1=cla.getField("pub_field");
System.out.println("Método para obter o campo público especificado:"+field1.toString());
} catch (SecurityException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
}
//Método para obter todos os domínios (incluindo domínios privados), Declare
Campo[] campo2=cla.getDeclaredFields();
for(Campo f:campo2){
System.out.println("Método para obter todos os campos (incluindo campos privados):"+f.toString());
}
//Método para obter o domínio especificado (incluindo domínio privado)
tentar {
Campo field3=cla.getDeclaredField("pri_field");
System.out.println("Método para obter o campo especificado (incluindo campo privado):"+field3.toString());
} catch (SecurityException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
}
//Obtém todos os métodos públicos (incluindo classes pai)
Método[] método=cla.getMethods();
for(Método m:método){
System.out.println("Obter todos os métodos públicos:"+m.toString());
}
tentar {
//Obtém o método sem parâmetros especificado
//O segundo parâmetro indica o tipo de parâmetro e o parâmetro NUll indica o método sem parâmetros.
Método método1=cla.getMethod("ReflectMethod", null);
System.out.println("Obter o método do método público sem parâmetros:"+method1.toString());
} catch (SecurityException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
}
//Método para obter todos os métodos desta classe (excluindo a classe pai)
Método[] método2=cla.getDeclaredMethods();
for(Método m:método2){
System.out.println("Obter todos os métodos (incluindo classes pai):"+m.toString());
}
//Obtém o método do método especificado desta classe (excluindo a classe pai)
//O primeiro parâmetro é o nome do método, o segundo parâmetro é o tipo de retorno do método e NULL é o método sem parâmetros.
tentar {
Método método3=cla.getDeclaredMethod("ReflectMethod",int.class);
System.out.println("Obter o método do método especificado desta classe (excluindo a classe pai):"+method3);
} catch (SecurityException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
}
//Obtém o construtor público
//Obtém o construtor público sem parâmetros
tentar {
Construtor cs=cla.getConstructor(null);
System.out.println("Obtenha o construtor sem parâmetros:"+cs);
} catch (SecurityException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
}
//Obtém o construtor público com parâmetros
//Se houver um construtor com vários parâmetros, existem vários construtores. Preste atenção na ordem.
tentar {
Construtor cs=cla.getConstructor(String.class);
System.out.println("Obtenha o construtor parametrizado:"+cs);
} catch (SecurityException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
}
//Obtém todos os métodos de construção
tentar {
Construtor[] cs=cla.getDeclaredConstructors();
for(Construtor c:cs){
System.out.println("Obter todos os métodos de construção:"+c);
}
} catch (SecurityException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
}
//Obtém o nome do pacote
Pacote pack=cla.getPackage();
System.out.println("Obter o nome do pacote atual:"+pack);
//Obter comentários
Anotação[] ann=cla.getAnnotations();
for(Anotação an:ann){
System.out.println(an.toString());
}
//Obtém a classe pai
Classe supercla=cla.getSuperclass();
System.out.println(supercla);
//Obtém a classe interna
Class[] innercla=cla.getDeclaredClasses();
for(Classe cl:innercla){
System.out.println(cl);
}
}
}
Resumo: Etapas para obter informações sobre objetos de classe:
1. Crie um objeto Classe. Método 1 Classe cla=Class.forName(“PATH”) Método 2 CLass cla=Instance.getclass();
2. Use Campo, Método, Construtor, Pacote e Anotação para obter informações relevantes chamando o método cla.getXXXX.
3. Os métodos de obtenção de classes pais e classes internas são ligeiramente diferentes.
4. Ao usar cla.getMethods, todos os métodos públicos da classe e da classe pai são chamados.
5. Ao usar Declarado, todos os métodos da classe, incluindo métodos privados, são chamados. O mesmo se aplica a domínios e construtores.
6. Quando a classe de reflexão não possui construtor público e não pode usar o método newInstance diretamente, use
Método cs=cla.getMethod("getInstance",null);//Obtém o método
Calendar calendar=(Calendar) cs.invoke(cla, null);//Executa o método obtido, o parâmetro 1 é o objeto do método de execução, o parâmetro 2 representa os parâmetros do método
Data df=calendar.getTime();
System.out.println(df.toString());
obter.