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

Java反射的理解

时间:2014-11-26 14:32:17      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:java   反射   

反射:获得对象运行时的类。
Person.class-->Person对象            Class.class-->Class对象
我们通过Person.class字节码文件创建一个Person对象代表现实中的一个人。Person对象用来映射一个人,它不是硬盘上得字节码文件,而是在内存里面根据加载类来创建出来的Person对象。我们所说的加载类其实就是Class类型的对象。里面只包含静态成员。
我们通过Class.class字节码文件创建一个Class对象代表现实中的一个类,Class对象用来映射一个类,它不是硬盘上的字节码文件,而是把字节码信息在内存里面封装成一个对象,这个对象就是Class对象。这个对象就映射一个类。
------------------------------------------------------------------
Person p=new Person()的完成过程是这样的:首先到硬盘上找Person.class字节码文件。然后把字节码信息在内存里面封装成一个类对象,这个对象的类型就是Class类型的对象,简称加载类,然后通过Class对象来创建Person对象。

注:每一个对象(NEW对象)对应一个Class对象(加载类),不同的CLass对象代表JAVA中不用的数据类型。JAVA中所有的class都会被封装成Class对象。

public static void main(String[] args) throws Exception 
	{
		
		// Person.class --> Person对象 --> zhangsan
		// Class.class --> Class对象(表示一个类型) --> Person.class
		Object obj = new Person("zhangsan", 19);
		
		//获得对象的类型有三种方式
		/*1.如果拿到了对象
		Class clazz = obj.getClass();   //返回class类型的实例对象。
		String classname = clazz.getName();
		System.out.println(classname);
		*/
		/*2.如果获得了表示类名的字符串
		String classname = "cn.itcast.day9.reflectstudy.Person";
		Class clazz = Class.forName(classname);
		System.out.println(clazz.getName());
		*/
		/*3.明确知道要去拿哪种类型的Class对象
		Class clazz = Person.class;
		System.out.println(clazz.getName());
		System.out.println(int.class.getName());
		*/
		
		Class clazz = obj.getClass();
		/*遍历类的所有属性
		Field[] fields = clazz.getDeclaredFields();
		for(int i=0; i<fields.length; i++) {
			String name = fields[i].getName();
			Class type = fields[i].getType();
			System.out.println("属性名:" + name + "   属性类型:" + type.getName());
		}
		*/
		/*获得一个属性,访问这个属性
		Field field = clazz.getDeclaredField("name");
		field.setAccessible(true);	//取消了访问检查
		field.set(obj, "曾哥");
		System.out.println(obj);
		Object value = field.get(obj);
		System.out.println(value);
		*/
		
		/*获得对象的run方法,调一把
		Method m = clazz.getDeclaredMethod("run", null);
		m.invoke(obj, null);
		*/
		
		/*获得类的构造方法,创建类的实例*/
		Constructor con = clazz.getConstructor(String.class, int.class);
		Object object = con.newInstance("zhangsan", 29);
		Person p = (Person) object;
		System.out.println(p);
	}


 


Java反射的理解

标签:java   反射   

原文地址:http://blog.csdn.net/u014600432/article/details/41512945

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