ASP.Net+Android+IOS开发 、Net培训、期待与您交流!
(前言:本篇文章参见了张孝祥的反射视频教程,以及网友的博客 http://www.cnblogs.com/gulvzhe/archive/2012/01/27/2330001.html)
目录:一、概述 二、Class 类介绍 三、如何使用反射以及简单代码演示
一、概述
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
反射主要用于框架中,框架需要大量调用使用框架者写的类,这些类是框架开发后完成的,所以框架不能直接通过new来获得它们的实例对象,而要用反射来做。
反射的缺点是比较消耗资源
二、Class 类介绍
java中有九个预定义的Class类型 (八个基本类型以及一个void类型)
可通过Class类中 isPrimitive()方法 来判断是否为预定义对象
获取Class 类对象的三种方式
1、 Class.forName(“类名”) 返回类的字节码,已加载的直接获取,未加载的先加载后获取
2、对象.getClass()
3、 类名.class
构造方法 对应Construct 类
成员变量 对应Filed 类
成员方法 对应Method类
三、如何应用反射
使用java的反射机制,一般需要遵循三步:
示例代码:通过反射操作类的实例属性,甚至可以强制获得类的private属性 ;以及三种方式获得类对象的代码演示。
1 public class ReflectTest { 2 3 /** 类目的:通过反射操作类的实例属性,甚至可以强制获得类的private属性 4 * @param args 5 * @throws ClassNotFoundException 6 * @throws IllegalAccessException 7 * @throws IllegalArgumentException 8 */ 9 public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException { 10 11 Class cat=Cat.class;//类名.class 方式获得类对象 12 Class catfor=Class.forName("edu.fjnu.reflect.Cat");// Class.forName(“类名”) 方法获得类对象,方便起见,直接抛出异常 13 14 Cat cats=new Cat(); 15 Class catget=cats.getClass();//对象.getClass() 方式获得类对象 16 17 Field[] catFields=cat.getDeclaredFields();//获得所有属性,包括private属性 18 19 for(Field catField:catFields){ 20 21 catField.setAccessible(true);//设置属性值为可访问,包括private属性值 22 23 String name=catField.getName();//获得属性名称 24 Object value=catField.get(cats);//方法参数为属性所属类的实例对象,异常简单抛出处理 25 26 System.out.println(name+":"+value); 27 } 28 29 } 30 31 } 32 class Cat{ 33 private String name="kitty"; 34 private String color="white"; 35 private int age=2; 36 }
初学者难免错误,欢迎评判指教,持续更正ing...........
ASP.Net+Android+IOS开发 、Net培训、期待与您交流!