Java反射机制

反射机制:

可以在运行时检查给定类的方法,并返回方法名,即运行时知道类的信息,编译期不需要。典型应用场景:对象序列化和javaBean

相关类:

Class类与java.lang.reflect类库,该类库包含了Field、Method以及Constructor类。这些类型的对象是由JVM在运行时创建的,用于表示未知类里对应的成员。这样你就可以使用Constructor对应的newInstance方法创建新的对象,用get()和set()方法读取和修改Field字段,用invoke()方法调用与Method对象关联的方法。还可以调用getFields、getMethods和getConstructor获取类的字段、方法以及构造器的对象数组。

Tips:

如果操作能不用反射实现,那么最好不使用反射。主要有以下三个方面的原因:

1)       性能——反射机制中类型是动态解析的,所以得不到java VirtualMachine的性能优化,其性能低于不使用反射机制的情况。

2)       安全限制——当程序运行在有安全管控的情形时,反射所需要的运行权限可能不能够被满足。

3)       暴露了类的内部实现——通过反射可以访问到对象的内部私有方法,破坏封装性。

如何使用反射:

1)       获取类对应的Class对象:

Object.getClass()

            .class

            Class.forName()

            GetSuperClass ….

2)        调用获取Construct       , Filed, Method的方法

getConstruct(), getFields(),getField(),getMethod(),getMethods()返回Method[] 数组

Method的说明如下:

Reflectiondefines an interface java.lang.reflect.Memberwhich is implemented by java.lang.reflect.Field, java.lang.reflect.Method, and java.lang.reflect.Constructor .

3)        通过返回的Member[]进行操作

即通过Field, Method, Constructor 实现类的相关操作。如获取Field类型,获取Method参数及返回值类型,改变Field值,调用指定Method(Method.invoke)等。

Note: 

Class.newInstance() will only succeed ifthe constructor is has zero arguments and is already accessible. Otherwise, itis necessary to use Constructor.newInstance() as in the aboveexample.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值