Java学习笔记之反射机制初探
2014-09-14 12:49
405 查看
在Java中有一个反射(reflect)机制.其实质是Sun公司官方推出的一组API.其主要作用是用来编写工具以及框架.比如我们每天都在使用的Eclipse.要了解反射机制,只需要掌握四个类即可:Class,Field,Method,Constructor.他们分别代表一个类的类对象,成员变量,成员方法和构造方法.下面来一一对其进行理解.
一. Class
首先,我们要明白Class的含义.它是所有类的类.听起来有点拗,其实很容易理解,所有的类其实都是Class类的一个对象,称为类对象.而这些类新建出来的实例叫做类的对象.
Class是反射机制的起点,也就是说,要想进行反射操作,就必须先获得类对象,然后通过类对象新建类的对象,或者获得属性对象,方法对象和构造方法对象等.获得类对象有三种方法:
Class<?> c1 = 类名.class ;
Class<?> c2 = 类的对象.getClass();//从Object类继承的方法
Class<?> c3 =Class.forName("包名. 类名");//Class类的静态方法
这三种方法实质都是一样的,但一般建议采用第三种方式.值得注意的是,一个类的类对象只有一个.c1,c2,c3其实是相等的.
获得了类对象之后,可以调用它的newInstance() 方法来获取类的对象了.
二.Field
Field即属性的意思,一个类的成员变量可以作为Field的对象存在.获取属性的方法是:
Field[] fs1 = c1.getDeclaredFields();//获得所有属性
Filed[] f = c1.getDeclaredField(String fieldName);//获得指定属性
其中Declared表示声明的意思,这个方法可以获取到已声明但还未赋值的属性,如果不加,就只能获取已经初始化的属性.所以,我们一般使用上面两个方法.获得Field对象之后,我们就可以给对象属性赋值了,
setAccessible(true); //这一步是将私有属性设为可访问
f.set(类的对象,对应的值);//第一个参数表示这个类的对象,第二个参数表示要赋的值.
三.Method
与Field类似,获取和调用的方法分别是:
Method m1 = c1.getDeclaredMethod(String MethodName,Class<?>...paramClass);
m1.invoke(类的对象,实际参数的值);//第二个参数传方法的参数,有几个就传几个,没有就不写
四.Constructor
Constructor cs = c.getDeclaredConstructor(参数的类对象);
Object obj = cs.newInstance(构造方法的参数);
一. Class
首先,我们要明白Class的含义.它是所有类的类.听起来有点拗,其实很容易理解,所有的类其实都是Class类的一个对象,称为类对象.而这些类新建出来的实例叫做类的对象.
Class是反射机制的起点,也就是说,要想进行反射操作,就必须先获得类对象,然后通过类对象新建类的对象,或者获得属性对象,方法对象和构造方法对象等.获得类对象有三种方法:
Class<?> c1 = 类名.class ;
Class<?> c2 = 类的对象.getClass();//从Object类继承的方法
Class<?> c3 =Class.forName("包名. 类名");//Class类的静态方法
这三种方法实质都是一样的,但一般建议采用第三种方式.值得注意的是,一个类的类对象只有一个.c1,c2,c3其实是相等的.
获得了类对象之后,可以调用它的newInstance() 方法来获取类的对象了.
二.Field
Field即属性的意思,一个类的成员变量可以作为Field的对象存在.获取属性的方法是:
Field[] fs1 = c1.getDeclaredFields();//获得所有属性
Filed[] f = c1.getDeclaredField(String fieldName);//获得指定属性
其中Declared表示声明的意思,这个方法可以获取到已声明但还未赋值的属性,如果不加,就只能获取已经初始化的属性.所以,我们一般使用上面两个方法.获得Field对象之后,我们就可以给对象属性赋值了,
setAccessible(true); //这一步是将私有属性设为可访问
f.set(类的对象,对应的值);//第一个参数表示这个类的对象,第二个参数表示要赋的值.
三.Method
与Field类似,获取和调用的方法分别是:
Method m1 = c1.getDeclaredMethod(String MethodName,Class<?>...paramClass);
m1.invoke(类的对象,实际参数的值);//第二个参数传方法的参数,有几个就传几个,没有就不写
四.Constructor
Constructor cs = c.getDeclaredConstructor(参数的类对象);
Object obj = cs.newInstance(构造方法的参数);
相关文章推荐
- java学习笔记09--反射机制
- java基础学习笔记——反射机制
- 黑马程序员——JAVA学习笔记——反射机制(下)
- 黑马程序员 java学习笔记 Day11:反射机制详解
- Java学习之反射机制学习笔记--2
- 【Java学习笔记】-----反射机制
- Android(java)学习笔记106-1:类的加载器(反射机制)
- JAVA的反射机制学习笔记(二)
- Java学习笔记09--反射机制
- java学习笔记09--反射机制
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- Java 反射机制-学习笔记
- 15. JAVA 反射机制 Part 1(Class类、反射、反射机制) ----- 学习笔记
- 黑马程序员——JAVA学习笔记——反射机制(上)
- java学习笔记09--反射机制
- JAVA的反射机制学习笔记(二)
- Java的反射机制学习笔记
- Effective Java 学习笔记(第53条:接口优先于反射机制)
- 黑马程序员——java学习笔记--反射机制
- java学习笔记反射机制