Java反射机制

来源:互联网 发布:淘宝怎么修改手机号 编辑:程序博客网 时间:2024/06/06 06:40

讲道理其实这个并不是很难的东西,之前学的时候也不觉得难,但是学完之后也并没有觉得有什么卵用,毕竟当你使用框架的时候,核心的东西都是别人实现好的,没错,就是指例如Struts2中的各种invoke方法。但是直到我在Spring中看到动态代理,我觉得还是有必要把它拎出来,复习一下。

简介

根据百科的定义,所谓java反射,是指Java程序在运行过程中,对于任意一个类,依然能够获取其方法、属性;对于任意一个对象,依然能够访问和调用它的方法、属性。这种动态获取信息以及动态调用属性方法的机制,我们称之为反射机制。

动态加载和静态加载

关于Java类的初始化,当用户开始第一次new出某个类的实例对象、或者通过java反射机制调用某个类的Class对象时。前者为静态加载,后者为动态加载,所谓动态,指的意思是:非编译时处理,或者叫做运行时处理。它使得用户可以在程序运行时根据需要改变一些性质:例如分配内存,又或者调用某个类。

关于反射

1.Class对象

获取Class对象
1. 继承自Object类的getClass()方法;
2. Class类的静态方法:Class.forName();
3. Class xxx=XXX.class;
Class对象的方法
1. String getName():返回类名;
2. Constructor getConstructor():根据方法参数返回构造器方法;
3. String getPackage():获得包名;
4. Field getField(String fieldName):获得字段;
5. Method getMethod(String methodName,Class[] params):根据方法名和方法参数获得方法;
6. Constructors[] getConstructors():返回一个构造器数组;
7. Method[] getMethod():返回所有的公共方法;
8. Field[] getFields():获得字段数组;

2.方法和字段

  1. 调用方法:method.invoke(Object object,param1,param2),其中object是调用该方法的对象,param是方法需要传递的参数;
  2. 调用构造方法:
Constructor constructor=class.getCosntructor();constructor.newInstance(param1,param2);

3.模拟字段的set、get方法:

Field field=class.getField(fieldName);field.setAccessible(true);//取消私有变量的合法性检验Object xxxobject=field.get(xxx);//表示获取xxx对象的属性
原创粉丝点击