Java 反射机制

反射的概念:

              主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

             反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。


二,反射机制的作用:

              1,反编译:.class-->.java

              2,通过反射机制访问java对象的属性,方法,构造方法等;

             这样好像更容易理解一些,下边我们具体看怎么实现这些功能。


三,Java提供反射机制中的类:

java.lang.Class;                

java.lang.reflect.Constructor;

java.lang.reflect.Field;        

java.lang.reflect.Method;

java.lang.reflect.Modifier;


获取类内信息

获取内容方法签名
构造器Constructor<T> getConstructor(Class<?>... parameterTypes)
包含的方法Method getMethod(String name, Class<?>... parameterTypes)
包含的属性Field getField(String name)
包含的Annotation<A extends Annotation> A getAnnotation(Class<A> annotationClass)
内部类Class<?>[] getDeclaredClasses()
外部类Class<?> getDeclaringClass()
所实现的接口Class<?>[] getInterfaces()
修饰符int getModifiers()
所在包Package getPackage()
类名String getName()
简称String getSimpleName()

              一些判断类本身信息的方法

判断内容方法签名
注解类型?boolean isAnnotation()
使用了该Annotation修饰?boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
匿名类?boolean isAnonymousClass()
数组?boolean isArray()
枚举?boolean isEnum()
原始类型?boolean isPrimitive()
接口?boolean isInterface()
obj是否是该Class的实例boolean isInstance(Object obj)

四、反射对象获取

            Class class1 = 类名.class;//第一种
   Class class2 = Class.forName("类名");//第二种
   Class class3 = new 类名().getClass();//第三种
   Object object = class1.newInstance();//实例化

五、修改字段的值

1.先得到field,

Field field=clazz.getDeclaredField("name");

2.将此对象的 accessible 标志设置为指示的布尔值。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。

field.setAccessible(true);

3.对变量值进行修改

field.set(employee,"张三");

要访问私有的方法也是一样。

用getDeclaredFields就能得到private 和public protend protected 的字段 
如果用c.getFields();只能得到public类型的属性



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值