Java反射基础

1.反射的定义:在我看来反射就是在程序运行过程中通过解剖类/接口的信息来动态操作类/接口的一种机制

实验用例:

public class Person{
    private String name;
    public int old;
    public Person(){this.name="";this.old=-1;}
    public Person(String name,int old){this.name=name;this.old=old;}
    private void print()
    {
        System.out.println(this.name="已经"+this.old+"岁了!");
    }
    public String toString()
    {
        return this.name+":"+this.old;
    }
        //setter,getter
}

2.Class的获取

//1.通过.class获得
Class clazz=int.class;
//2.通过.getClass()获得,不能用基本类型.getClass()
clazz=Integer.getClass();
//3.通过Class.forName()获得
clazz=Class.forName("com.jz.reflect.Person")

3.Field的获取和操作

  Field field=cl.getField("old");//获得公有字段信息
  field=cl.getDeclaredField("name");//获得任意字段信息
  Field[] fields=cl.getFields();//获得所有公有字段信息
  fields=cl.getDeclaredFields();//获得所有字段信息
  field.setAccessible(true);//如果要操作非公有字段必须设置
  field.set(cl.newInstance(), "蒋曾");//将指定对象变量上此 Field 对象表示的字段设置为指定的新值

 4.Method的获取和操作

Method method=clazz.getDeclaredMethod("print");//根据方法名和参数获得私有Method,这里参数为空
method.setAccessible(true);//如果要使用非公有方法必须要设置
Method[] methods=clazz.getMethods();//获得所有公有参数
method.invoke(clazz.newInstance(), null);//对带有指定参数的指定对象调用由此 Method 对象表示的底层方法

 5.Constructor的获取和操作

Constructor constructor=clazz.getConstructor(String.class,int.class);//根据参数类型获取构造器
constructor.newInstance("蒋曾",21);//通过构造器创建对象实例

6.修饰符类型获取和操作

  int modifier=clazz.getModifiers();//通过Class,Field,Method,Constructor的getModifiers()获得一个int值
  System.out.println(Modifier.toString(modifier));//Modifier的静态方法toString()获得修饰符


此外还有更多更详细的东西可以查询相关API java.lang和java.lang.reflect

原文地址:https://www.cnblogs.com/blogofjzq/p/9225978.html