码迷,mamicode.com
首页 > 编程语言 > 详细

Java再学习-反射机制

时间:2016-05-12 23:41:29      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:

首先说到反射,大家肯定不会陌生,如果不知道反射,相信那些市面上常用的主流框架就不会出现了。废话不说,上主题!

Java反射机制

运行时

判断任意一个对象所属的类

构造任意一个类的对象

判断任意一个类所具有的成员变量和方法

调用一个对象的方法


注意点:运行时,而不是编译时


首先概念性的东西,小编就不细说了,想了解的直接问度娘吧,直接上干货吧。


通过反射来进行方法调用的具体步骤:

1.首先要获取Class对象(手段比较多,例如通过forname手段和InvokeTester.class手段)

2.如果想调用方法获取Method对象(),如果想操作字段就要获取Field[]对象


上面这两点一会儿下面的代码中都会体现的,大家不要着急。


小编这里想说两点,关于调用类的构造方法的实现,当然构造方法分成带参数和不带参数的,先来一段不带参数


Class c = Test.class;
c.newInstance();


另一种写法:


Constructor con = c.getConstructor(new Class[]{});
con.newInstance(new Object[]{});

带参数的构造方法调用


Class c = Test.class;
Constructor con = c.getConstructor(new Class[]{double.class,int.class});
con.newInstance(new Object[]{1.2,3})//类型一致

再次声明。反射是各大框架的基础,通过反射我们可以获取类,类的方法,类的变量等等,这样才会有了现在的Struts,spring等等。


最后来看一段代码:

package cn.tgb.reflection;

public class PrivateTest {
	
	private String name = "hello";
	
	public String getName(){
		return this.name;
	}
}

问:如果将变量name的值,换成world呢?

当然,通过反射的方式了,来看下一段代码吧。


package cn.tgb.reflection;

import java.lang.reflect.Field;

public class ReflectionTest {
	
	public static void main(String[] args) throws Exception {
		
		PrivateTest pt = new PrivateTest();
		
		Class<?> clazz = PrivateTest.class;
		
		Field field = clazz.getDeclaredField("name");
		
		field.setAccessible(true);//压制java的访问控制检查。
		
		field.set(pt, "world");
		
		System.out.println(field.get(pt));
		
	}
}


大家可以运行一下上面的代码,看看输出的结构是否是world。最后通过反射,获取类中的字段名,然后通过set的方式就可以修改字段的名啦。


Java再学习-反射机制

标签:

原文地址:http://blog.csdn.net/u010158267/article/details/51347042

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!