反射的初步使用(2)

反射的使用

1 操作Constructor 构造方法类
  • 通过Class类对象获取对应类的Constructor构造方法类对象
Constructor[] getConstructors();
	获取当前Class对象对应类中所有非私有化构造方法类对象数组。
	
Constructor[] getDeclaredConstructors();
	【暴力反射】
	获取当前Class对象对应类中的所有构造方法类对象数组,包括私有化构造方法。
	
Constructor getConstructor(Class... parameterTypes);
	获取当前Class对象中,指定参数数据类型的构造方法。获取的构造方法为非私有化构造方法
	Class... parameterTypes 
		Class类型不定长参数,用于约束当前构造方法对应的数据类型。
	例如:
		无参数构造方法
		cls.getConstructor(); ==> Person();
		两个参数构造方法(int, String)
		cls.getConstructor(int.class, String.class) ==> Person(int, String)
		
Constructor getDeclaredConstructor(Class... parameterTypes);
	【暴力反射】
	获取当前Class对象中,指定数据类型的构造方法,包括私有化构造方法
	例如:
		获取私有化String类型构造方法
		cls.getDeclaredConstructor(String.class) ==> private Person(String.class)
  • 操作Constructor类对象创建对应类对象
Object newInstance(Object... parameters);
	通过Constructor类对象,执行对应的构造方法,创建对应类对象
	Object... 不定长参数,要求数据类型为Object类型。
	例如:
		Person(); 无参数构造方法
		Person p1 = (Person) constructor.newInstance();
		Person(int, java.lang.String);
		Person p2 = (Person) constructor.newInstance(10, "天地玄黄"); 
2 操作 Method 成员方法类
  • 通过Class类对象获取对应类的Method成员方法类对象
Method[] getMethods();
	通过Class类对象调用,获取当前类内的所有非私有化成员方法,包含从父类继
	承而来子类可以使用的非私有化方法。
	
Method[] getDeclaredMethods();
	【暴力反射】
	通过Class类对象调用,获取当前类内的所有成员方法,包括私有化成员方法,
	但是不包括从父类继承而来的方法。
	
Method getMethod(String methodName, Class... parameterTypes);
	通过Class类对象调用,根据方法名称和对应的形式参数列表数据类型获取对应
	的成员方法,可以获取父类继承方法,不能获取私有化成员方法
	例如:
		无参数成员方法 获取 game();
			cls.getMethod("game");
        有参数成员方法 获取 game(String);
            cls.getMethod("game", String.class);
	
Method getDeclaredMethod(String methodName, Class... parameterTypes);
	通过Class类对象调用,根据方法名称和对应的形式参数列表数据类型获取对应
	的成员方法,可以获取私有化成员方法,不能获取父类成员方法。
	例如:
		无参数私有化成员方法 testPrivate();
			cls.getDeclaredMethod("testPrivate");
		有参数私有化成员方法 testPrivate(String);
			cls.getDeclaredMethod("testPrivate", String.class);
  • 操作Method类对象执行方法
Object invoke(Object obj, Object... parameters);
	通过Method类对象调用,执行对应方法。
	Object obj 执行当前方法的类对象。
	Object... parameters 对应当前方法的实际参数列表
3 操作 Field 成员变量类
  • 通过Class类对象获取对应类的Field成员变量类对象
Field[] getFields();
	获取类内所有非私有化成员变量数组
	
Field[] getDeclaredFields();
	【暴力反射】
	获取类内所有成员变量数组,包括私有化成员变量
Field getField(String fieldName);
	根据成员变量名字获取对应的成员变量对象,要求当前成员变量非私有化
	例如:	
		public int test;
		cls.getField("test");

Field getDeclaredField(String fieldName);
	【暴力反射】
	获取类内指定名字的成员变量对象,包括私有化成员变量
	例如:
		private String name;
		private int id;
		cls.getDeclaredField("name");
		cls.getDeclaredField("id");		

  • 操作Field类对象赋值取值成员变量
void set(Object obj, Object value);
	赋值Field类对象对应成员变量
	Object obj 明确当前赋值的成员变量是哪一个类对象的。
	Object value 给予当前成员变量赋值使用数据
	
	Before:
		Person p = new Person();
		p.setName("张三");
	Now:	
		name.set(p, "张三");
		
Object get(Object obj);
	取值Field类对象对应成员变量
	Object obj 明确获取的成员变量对应数据是哪一个类对象
	Before
		Person p = new Person();
		p.getName(); ==> 张三
		
		name.get(p); ==> 张三
4 暴力反射授权
class AccessibleObject 类内方法
public static void setAccessible(AccessibleObject[] array, boolean flag);
	通过类名调用的静态工具方式,给予AccessibleObject类对象或者其子类对象数
	组,赋值操作权限。
	子类对象包括: Field Method Constructor
	
public void setAccessible(boolean flag);
	通过AccessibleObject类对象调用,单一权限授权,Field Method Constructor都可以使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值