java反射获取/创建对象

获取class对象

1、调用某个对象的getClass()方法

 例:Person p =  new Person();

   Class clazz  =  p.getClass();

2、调用某个类的class属性

 例:Class clazz = Person.class;

3、使用Class类中的forName()静态方法(最安全,性能好)

 例:Class clazz  = Class.forName("类的全路径");(最常用)

Class类:反射的核心类,可以获取类的属性和方法等信息

Field类:java.lang.reflect包中的类,表示类的成员变量,可以获取和设置类的属性

Method类:java.lang.reflect包中的类,表示类的方法,可以获取和设置类中的方法信息或执行方法

Constructor类:java.lang.reflect包中的类,表示类的构造方法

例:

获取Person类的所有方法信息

  Method[] method = clazz.getDeclareMethods();

获取Person类的所有成员属性信息

  Field[] field = clazz.getDeclareFields();

获取Person类的所有构造方法信息

  Constructor[] constructor = clazz.getDeclareConstructors();

创建对象

Class对象的newInstance()
1. 使用 Class 对象的 newInstance()方法来创建该 Class 对象对应类的实例,但是这种方法要求 该Class对象对应的类有默认的空构造器

 例:Person p = (Person) clazz.newInstance();

  

调用Constructor对象的newInstance()

2、先使用Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance() 方法来创建 Class对象对应类的实例,通过这种方法可以选定构造方法创建实例

例://获取构造方法并创建对象 
  Constructor c=clazz.getDeclaredConstructor(String.class,String.class,int.class); 
  //创建对象并设置属性 
  Person p1=(Person) c.newInstance("李四","男",20);