关于JAVA类的反射理解

优点: 

(1)能够运行时动态获取类的实例,大大提高系统的灵活性和扩展性。 
(2)与Java动态编译相结合,可以实现无比强大的功能 

缺点: 
(1)使用反射的性能较低 
(2)使用反射相对来说不安全 

(3)破坏了类的封装性,可以通过反射获取这个类的私有方法和属性


以上先说明这个的优缺点 让我们下一步去理解下 JAVA中的反射


简单来说就是利用这一点反射我们可以动态的获取类自身的一个信息。在JAVA中,只要给类定义了名称,那么就可以通过反射机制去获取类

所有信息以及方法。灵活性特性就体现在这里。

说了那么多 其实针对性的题目来一题吧:



结果大家都很清楚了

a=1
b=2
x=5
y=7


那我们如何通过类的反射去写一个方法  拿到a b呐? 至于main方法中的x y变量 我不懂怎么获取。请看到的大神们指导下。谢谢


		// 获取类的字节码文件对象
		Class c = Class.forName("com.test.Reflect");
		// 获取该类的所有成员变量  然后改变其值
		Field[] f = c.getDeclaredFields();
		for (Field fie : f) {
			System.out.println(fie);
		}
		Field a = c.getDeclaredField("a");
		a.set("a", 10);

这样的方法输入结果  你会发现   我们将a的值改变了。

其实其中还有很多方法    比如获取类中的构造方法


		//获取类下的所有构造方法  那要如何取构造方法里边的值呐?
//		Method[] methods = c.getMethods();
		
		Method method =	 c.getDeclaredMethod("main", String[].class);
		

这样就能获取Main 的method


那我们看看一些Class中的常用常见的方法吧。


从Class中获取信息(可以查看Class的API文档了解):

获取类的构造器 
首先介绍一下Constructor类,这个类用来封装反射得到的构造器,Class有四个方法来获得Constructor对象

public Constructor<?>[] getConstructors() 返回类中所有的public构造器集合,默认构造器的下标为0
public Constructor<T> getConstructor(Class<?>... parameterTypes) 返回指定public构造器,参数为构造器参数类型集合
public Constructor<?>[] getDeclaredConstructors() 返回类中所有的构造器,包括私有
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 返回任意指定的构造器

获取类的成员变量 
成员变量用Field类进行封装,主要的方法非常的类似:
public Field getDeclaredField(String name) 获取任意指定名字的成员
public Field[] getDeclaredFields() 获取所有的成员变量
public Field getField(String name) 获取任意public成员变量
public Field[] getFields() 获取所有的public成员变量

获取类的方法 
public Method[] getMethods() 获取所有的共有方法的集合
public Method getMethod(String name,Class<?>... parameterTypes) 获取指定公有方法 参数1:方法名 参数2:参数类型集合 
public Method[] getDeclaredMethods() 获取所有的方法
public Method getDeclaredMethod(String name,Class<?>... parameterTypes) 获取任意指定方法

常用的就这些,知道这些,其他的都好办……


具体的案例的话这边也贴了一份最近参考的文献材料。具体的详细介绍说明可以去看看。

http://www.cnblogs.com/lijunamneg/archive/2013/03/25/2980991.html



1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值