反射-提高扩展性

反射的对象: Class Field Constractor

1. 创建字节码文件(.class)对象的3种方法

1. 任何类型都有静态字段class,返回该类型的字节码文件对象

Class clazz = Person.class;

2. 任何类都有getClass()方法,定义在Object类中,通过对象调用getClass()方法,返回该对象的字节码文件对象

Person person = new Person();
Class clazz = person.getClass();

3. 类Class静态方法forName()返回类名字节码文件对象

Class clazz = Class.forName("com.commom.Person");

注意: 字符串必须为包名+类名,否则 classNotFindException;

2. 创建实例

1. 调用空参的构造方法获取实例

Object object = clazz.newInstance();

2. 调用带参的构造方法获取实例

Constractor constractor = clazz.getDeclaredConstractor(String.class,int.class);//注意: 通过指定类型,获取对应类型的构造器对象
Object object = constractor.newInstance("wms",30);//构造器对象传入实参,创建对象

3. 获取字段

Field name = clazz. getDeclaredField ( "name") ;//通过字段名,获取指定字段
Field [] fields = clazz .getFields () ;//获取所有字段
AccessiableObject
     |--Method
     |--Field
     |--Constractor

注意:

  1. clazz.getDeclaredXXX : 获取全部成员,忽略权限修饰,暴力获取clazz.getXXX获取公共(public)成员
  2. 成员对象.setAccessiable(true) : 忽略权限修饰,暴力访问

4. 获取方法

Method method = clazz.getDeclaredMethod(String.class,int.class);//获取指定方法
Method [] declaredMethods = clazz . getDeclaredMethods() ;//获取所有方法
method.invoke(object,"wms",30);//调用一般方法,返回的是该方法的返回值,若为静态,object为null
Copyright © wu_mingsheng@126.com 2017 all right reserved,powered by Gitbook该文件最后修改时间: 2019-12-31 10:21:23

results matching ""

    No results matching ""