day44-反射03( 二 )


day44-反射03

文章插图

day44-反射03

文章插图
3.2java.lang.reflect.Field类
  1. getModifiers:以int形式返回修饰符
    [说明:默认修饰符default是0,public 是1 ,private是2,protected是4,static是8,final是16]
    如果有叠加的修饰符,如 public static ...,那么返回的int值就是相加的结果,public(1)+static(8)=9
  2. getType:以Class形式返回类型,即返回该属性对应的类的Class对象
  3. getName:返回属性名
3.3java.lang.reflect.Method类
  1. getModifiers:以int形式返回修饰符
    [说明:默认修饰符default是0,public 是1 ,private是2,protected是4,static是8,final是16]
    如果有叠加的修饰符,如 public static ...,那么返回的int值就是相加的结果,public(1)+static(8)=9
  2. getReturnType:以Class形式获取返回值的类型的Class对象
  3. getName:返回方法名
  4. getParameteTypes:以Class[]返回参数类型数组
3.4java.lang.reflect.Constructor类
  1. getModifiers:以int形式返回修饰符
  2. getName:返回构造器名(全类名)
  3. getParameteTypes:以Class[]返回参数类型数组
例子2:使用Field类、Method类、Constructor类
package li.reflection;import org.junit.jupiter.api.Test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;//演示如何通过反射获取类的结构信息public class ReflectionUtils {public static void main(String[] args) {}//第二组方法 API@Testpublic void api_02() throws ClassNotFoundException {//得到Class对象Class<?> personCls = Class.forName("li.reflection.Person");//getDeclaredFields:获取本类中所有属性//[说明:默认修饰符default是0,public 是1 ,private是2,protected是4,static是8,final是16]Field[] declaredFields = personCls.getDeclaredFields();for (Field declaredField : declaredFields) {System.out.println("本类中所有属性=" + declaredField.getName()+ " 该属性的修饰符值=" + declaredField.getModifiers()+ " 该属性的类型=" + declaredField.getType());}//getDeclaredMethods:获取本类中所有方法Method[] declaredMethods = personCls.getDeclaredMethods();for (Method declaredMethod : declaredMethods) {System.out.println("本类中的所有方法=" + declaredMethod.getName()+ " 该方法的访问修饰符=" + declaredMethod.getModifiers()+ " 该方法返回类型=" + declaredMethod.getReturnType());//输出当前这个方法的形参数组情况Class<?>[] parameterTypes = declaredMethod.getParameterTypes();for (Class<?> parameterType : parameterTypes) {System.out.println("该方法的形参类型=" + parameterType);}}//getDeclaredConstructors:获取本类中所有构造器Constructor<?>[] declaredConstructors = personCls.getDeclaredConstructors();for (Constructor<?> declaredConstructor : declaredConstructors) {System.out.println("=================");System.out.println("本类中所有构造器=" + declaredConstructor);Class<?>[] parameterTypes = declaredConstructor.getParameterTypes();for (Class<?> parameterType : parameterTypes) {System.out.println("该构造器的形参类型=" + parameterType);}}}}class A {public String hobby;public void hi() {}public A() {}}interface IA {}interface IB {}@Deprecatedclass Person extends A implements IA, IB {//属性public String name;protected static int age;String job;private double sal;public Person() {}public Person(String name) {this.name = name;}//私有private Person(String name, int age) {}//方法public void m1(String name, int age, double sal) {}protected String m2() {return null;}void m3() {}private void m4() {}}
day44-反射03

经验总结扩展阅读