ClaseReflexiónDemostración
Copie el código de código de la siguiente manera:
paquete Reflexión;
@Obsoleto
clase pública Demostración de reflexión {
Cadena privada pri_field;
cadena pública pub_field;
Demostración de reflexión pública(){}
Demostración de reflexión pública (nombre de cadena) {}
Demostración de reflexión privada (nombre de cadena, int int1) {}
método de reflexión público vacío(){}
método de reflexión público vacío (cadena cadena) {}
método de reflexión vacío privado (int int1) {}
clase internalclss_Refección{}
}
Clase de pruebaReflectionDemoTest
Copie el código de código de la siguiente manera:
paquete Reflexión;
importar java.lang.annotation.Annotation;
importar java.lang.reflect.Constructor;
importar java.lang.reflect.Field;
importar java.lang.reflect.Method;
clase pública PruebaDemoReflexión {
público estático vacío principal (String [] argumentos) {
//Crea un objeto de clase y usa modificaciones genéricas para evitar la transferencia forzada
Clase cla=ReflectionDemo.class;
//Método para obtener todos los campos públicos
Campo[] campo=cla.getFields();
para(Campo f:campo){
System.out.println("Método para obtener todos los campos públicos:"+f.toString());
}
//Método para obtener un dominio público específico
intentar {
Campo campo1=cla.getField("pub_field");
System.out.println("Método para obtener el campo público especificado:"+field1.toString());
} captura (SecurityException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
} captura (NoSuchFieldException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
}
//Método para obtener todos los dominios (incluidos los privados), Declarar
Campo[] campo2=cla.getDeclaredFields();
para(Campo f:campo2){
System.out.println("Método para obtener todos los campos (incluidos los campos privados):"+f.toString());
}
//Método para obtener el dominio especificado (incluido el dominio privado)
intentar {
Campo campo3=cla.getDeclaredField("pri_field");
System.out.println("Método para obtener el campo especificado (incluido el campo privado):"+field3.toString());
} captura (SecurityException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
} captura (NoSuchFieldException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
}
//Obtiene todos los métodos públicos (incluidas las clases principales)
Método[] método=cla.getMethods();
for(Método m:método){
System.out.println("Obtener todos los métodos públicos:"+m.toString());
}
intentar {
//Obtiene el método sin parámetros especificado
// El segundo parámetro indica el tipo de parámetro y el parámetro NUll indica el método sin parámetros.
Método método1=cla.getMethod("ReflectMethod", null);
System.out.println("Obtener el método del método público sin parámetros:"+method1.toString());
} captura (SecurityException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
} captura (NoSuchMethodException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
}
//Método para obtener todos los métodos de esta clase (excluyendo la clase principal)
Método[] método2=cla.getDeclaredMethods();
para(Método m:método2){
System.out.println("Obtener todos los métodos (incluidas las clases principales):"+m.toString());
}
//Obtiene el método del método especificado de esta clase (excluyendo la clase principal)
// El primer parámetro es el nombre del método, el segundo parámetro es el tipo de retorno del método y NULL es el método sin parámetros.
intentar {
Método método3=cla.getDeclaredMethod("ReflectMethod",int.class);
System.out.println("Obtenga el método del método especificado de esta clase (excluyendo la clase principal):"+método3);
} captura (SecurityException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
} captura (NoSuchMethodException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
}
//Obtener el constructor público
//Obtener el constructor público sin parámetros
intentar {
Constructor cs=cla.getConstructor(null);
System.out.println("Obtener el constructor sin parámetros:"+cs);
} captura (SecurityException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
} captura (NoSuchMethodException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
}
//Obtener el constructor público con parámetros
// Si hay un constructor con múltiples parámetros, hay múltiples constructores. Preste atención al orden.
intentar {
Constructor cs=cla.getConstructor(String.class);
System.out.println("Obtener el constructor parametrizado:"+cs);
} captura (SecurityException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
} captura (NoSuchMethodException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
}
//Obtener todos los métodos de construcción
intentar {
Constructor[] cs=cla.getDeclaredConstructors();
para(Constructor c:cs){
System.out.println("Obtener todos los métodos de construcción:"+c);
}
} captura (SecurityException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
}
//Obtener el nombre del paquete
Paquete paquete=cla.getPackage();
System.out.println("Obtener el nombre del paquete actual:"+pack);
//Obtener comentarios
Anotación[] ann=cla.getAnnotations();
para(Anotación an:ann){
System.out.println(an.toString());
}
//Obtener la clase padre
Clase supercla=cla.getSuperclass();
System.out.println(supercla);
//Obtener clase interna
Clase[] Innercla=cla.getDeclaredClasses();
para(Clase cl:cla interna){
System.out.println(cl);
}
}
}
Resumen: Pasos para obtener información sobre objetos Clase:
1. Cree un objeto Clase. Método 1 Clase cla=Class.forName(“PATH”) Método 2 CLass cla=Instance.getclass() Método 3 Clase cla=Class.class.
2. Utilice Campo, Método, Constructor, Paquete y Anotación para obtener información relevante llamando al método cla.getXXXX.
3. Los métodos para obtener clases principales y clases internas son ligeramente diferentes.
4. Cuando se usa cla.getMethods, se llaman todos los métodos públicos de la clase y la clase principal.
5. Cuando se utiliza Declared, se llaman todos los métodos de la clase, incluidos los métodos privados. Lo mismo se aplica a los dominios y constructores.
6. Cuando la clase de reflexión no tiene un constructor público y no puede usar el método newInstance directamente, use
Método cs=cla.getMethod("getInstance",null);//Obtener el método
Calendar calendar=(Calendar) cs.invoke(cla, null);// Ejecutar el método obtenido, el parámetro 1 es el objeto del método de ejecución, el parámetro 2 representa los parámetros del método
Fecha df=calendar.getTime();
System.out.println(df.toString());
Llegar.