反射的基本知识

反射日常中用的不是很多,一般都是用于框架或者抽象度很高的底层代码,是个动态加载,反射的思想是万物皆可对象。
反射的基本知识并不难,也不需要过多探究
反射用到的类主要是四种:java.lang.Classjava.lang.reflect.Constructorjava.lang.reflect.Fieldjava.lang.reflect.Method
反射的基本使用:

public class ClassTest{
	public void Test(){
		//加载类,获取加载类的Class类的对象
		Class cls = Class.forName(classfullpath);
		//获取加载类的实例(返回的是Objecit类型),运行类型还是加载类的实例类型
		Objecit o = cls.newInstance();
		//获取加载类的方法对象
		Method method = cls.getMethod(methodName);
		//调用方法,参数是加载类的实例,如果是静态方法,o可为null
		method.invoke(o);
		//获取成员变量,参数是成员变量名的字符串类型
		Field field = cls.getField("fieldName");
		//获取成员变量的值,参数也是加载类的实例
		field.get(o);
		//获取构造方法,参数为构造器中的参数类型
		Constructor constructor = cls.getConstructor();
		
	}
}

下面看下这4个类常用的方法,源码多涉及本地方法,就不用看了:
java.lang.Class
String getName():获取全类名
String getSimpleName():获取简易类名
Field[] getFields():获取所有公共属性,包括父类以上的属性
Field[] getDeclaredFields():获取本类所有属性
Method[] getMethods():获取所有公共方法,包括父类以上的方法
Method[] getDeclaredMethods():获取本类所有方法
Constructor[] getConstructors():获取所有公共构造方法,包括父类以上的方法
Constructor[] getDeclaredConstructors():获取本类所有构造方法
String getPacket():以Packet形式返回包信息
Class getSuperclass():获取父类信息
Class getInterfaces():获取接口信息
Annotation[] getAnnotations():获取注解信息
属性java.lang.reflect.Field
int getModifiers():返回修饰符的类型编号,1是public,2是private,4是protected,8是static,16是final,如果有多个修饰符,返回的时直接相加
Class getType():返回类型
String getName():返回属性名
setAccessible():忽视访问权限
方法java.lang.reflect.Method
int getModifiers():返回修饰符的类型编号
Class getReturnType():获取返回类型
String getName():返回方法名
Class[] getParameterTypes():获取参数类型数组
setAccessible():忽视访问权限
构造器java.lang.reflect.Constructor
int getModifiers():返回修饰符的类型编号
String getName():返回方法名
Class[] getParameterTypes():获取参数类型数组
setAccessible():忽视访问权限

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值