Java反射机制

本文深入讲解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.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值