java--反射--獲取類的結構資訊
阿新 • • 發佈:2021-06-29
- 第一組:java.lang.Class類
-
package com.model.reflection; import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * @Description:測試類 * @Author: 張紫韓 * @Crete 2021/6/29 15:24 * 演示獲取類的結構資訊 */ public class ReflectionDemo04 {
-
- 第二組 java.lang.reflect.Field類
-
第三組
- 第四組:
-
package com.model.reflection; import org.junit.Test; import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.TypeVariable; /** * @Description:測試類 * @Author: 張紫韓 * @Crete 2021/6/29 15:24 * 演示獲取類的結構資訊 */ public class ReflectionDemo04 { /** * 第一組API: * 1. getName:獲取全類名 * 2. getSimpleName:獲取簡單類名 * 3. getFields:獲取所有public修飾的屬性,包含本類以及父類的 * 4. getDeclaredFields:獲取本類中所有屬性 * 5. getMethods:獲取所有public修飾的方法,包含本類以及父類的 * 6. getDeclaredMethods:獲取本類中所有方法 * 7. getConstructors:獲取所有public修飾的構造器 * 8. getDeclaredConstructors:獲取本類中所有構造器 * 9. getPackage:以Package形式返回包資訊 * 10.getSuperClass:以Class形式返回父類資訊 * 11.getInterfaces:以Class[1形式返回介面資訊 * 12.getAnnotations:以Annotation[]形式返回註解資訊 * */ // 1.API呼叫 @Test public void test_API() throws ClassNotFoundException { // 1.獲取Class類物件 Class<?> aClass = Class.forName("com.model.reflection.Person"); // * 1. getName:獲取全類名 System.out.println(aClass.getName()); // * 2. getSimpleName:獲取簡單類名 System.out.println(aClass.getSimpleName()); // * 3. getFields:獲取所有public修飾的屬性,包含本類以及父類的 Field[] fields = aClass.getFields(); for (Field field : fields) { System.out.println(field); } // * 4. getDeclaredFields:獲取本類中所有屬性 Field[] declaredFields = aClass.getDeclaredFields(); for (Field field : declaredFields) { System.out.println(field.getName()); } // * 5. getMethods:獲取所有public修飾的方法,包含本類以及父類的 Method[] methods = aClass.getMethods(); for (Method method : methods) { System.out.println(method); } // * 6. getDeclaredMethods:獲取本類中所有方法 Method[] declaredMethods = aClass.getDeclaredMethods(); for (Method declaredMethod : declaredMethods) { System.out.println(declaredMethod); } // * 7. getConstructors:獲取所有public修飾的構造器 Constructor<?>[] constructors = aClass.getConstructors(); for (Constructor<?> constructor : constructors) { System.out.println(constructor); } // * 8. getDeclaredConstructors:獲取本類中所有構造器 Constructor<?>[] declaredConstructors = aClass.getDeclaredConstructors(); for (Constructor<?> declaredConstructor : declaredConstructors) { System.out.println(declaredConstructor); } // * 9. getPackage:以Package形式返回包資訊 Package aPackage = aClass.getPackage(); System.out.println(aPackage); // * 10.getSuperClass:以Class形式返回父類資訊 System.out.println(aClass.getSuperclass()); // * 11.getInterfaces:以Class[1]形式返回介面資訊 Class<?>[] interfaces = aClass.getInterfaces(); for (Class<?> anInterface : interfaces) { System.out.println(anInterface); } // * 12.getAnnotations:以Annotation[]形式返回註解資訊 Annotation[] annotations = aClass.getAnnotations(); for (Annotation annotation : annotations) { System.out.println(annotation); } } // 2.成員變數Field屬性 @Test public void test_Field() throws ClassNotFoundException { Class<?> aClass = Class.forName("com.model.reflection.Person"); Field[] fields = aClass.getFields(); //獲取本類中(包括父類)所有的public修飾的成員變數 for (Field field : fields) { System.out.println(field.getName()); //成員變數名 //成員變數的訪問修飾符的值, //說明:預設修飾符是0,public 是1, private是2,protected是4,static是8, final是16 System.out.println(field.getModifiers()); } System.out.println("****************************"); Field[] declaredFields = aClass.getDeclaredFields(); for (Field declaredField : declaredFields) { System.out.println("成員變數的名字"+declaredField.getName()); //獲取本類中所有的成員變數 //獲取本類中成員變數的訪問屬性, //有兩個修飾符修飾 ,則修飾符的值相加 System.out.println("成員變數的訪問修飾的值"+declaredField.getModifiers()); System.out.println("成員變數的型別"+declaredField.getType()); } } // 3.成員方法Method屬性 @Test public void test_Method() throws ClassNotFoundException { Class<?> aClass = Class.forName("com.model.reflection.Person"); Method[] methods = aClass.getDeclaredMethods(); for (Method method : methods) { System.out.println("成員方法的名字"+method.getName()); System.out.println("成員方法的修飾符的值"+method.getModifiers()); System.out.println("成員方法的返回值型別"+method.getReturnType()); //成員方法的引數 TypeVariable<? extends Class<?>>[] typeParameters = aClass.getTypeParameters(); for (TypeVariable<? extends Class<?>> typeParameter : typeParameters) { System.out.println(typeParameter); } } } // 4.構造器Constructor屬性 @Test public void test_Constructor() throws ClassNotFoundException { Class<?> aClass = Class.forName("com.model.reflection.Person"); Constructor<?>[] declaredConstructors = aClass.getDeclaredConstructors(); for (Constructor<?> declaredConstructor : declaredConstructors) { System.out.println("構造器的全類名:"+declaredConstructor.getName()); System.out.println("構造器的修飾符的值:"+declaredConstructor.getModifiers()); Class<?>[] parameterTypes = declaredConstructor.getParameterTypes(); for (Class<?> parameterType : parameterTypes) { System.out.println("構造器的引數:"+parameterType.getName()); } } } } class Person{ public Person() { } public Person(String name, int age, double sal) { this.name = name; this.age = age; this.sal = sal; } public String name; protected int age; private double sal; public void m1(){ System.out.println("m1"); }; protected void m2(){ System.out.println("m2"); }; private void m3(){ System.out.println("m3"); }; }