Java 反射机制学习Demo
2016-08-27 13:52
701 查看
Java 反射机制学习Demo
1. 什么是Java反射机制?反射机制是Java语言的一个关键性质,它允许我们在程序运行时,获取类的全部(包括private修饰的)成员变量和成员方法,并能动态地改变这些成员变量和成员方法。
2.实例Demo
新建一个ReflectTest 类,代码如下:
ReflectTest.java:
public class ReflectTest { private boolean flag; //布尔型 私有 private int value = 0; // 整型 私有 ReflectTest() { //构造函数 setFlag(false); //设置flag为false } private void setFlag(boolean flag) { //设置flag this.flag = flag; } public void print() { //如果flag为true,则输出"flag is true",否则输出"flag is false" if(flag) { System.out.println("flag is true"); } else { System.out.println("flag is false"); } } public void getValue() { //输出value的值 System.out.println(value); } }
新建一个test类,代码如下:
test.java:
import java.lang.reflect.Method; import java.lang.reflect.Field; public class test { public static void main(String[] args) { ReflectTest reflectTest = new ReflectTest(); reflectTest.print(); // flag is false reflectTest.getValue(); //0 try { // 反射拿到ReflectTest类中的setFlag(boolean flag)方法 Method method = reflectTest.getClass().getDeclaredMethod("setFlag", Boolean.TYPE); method.setAccessible(true); //取消访问检查 method.invoke(reflectTest, true); // 传入true作为该方法的参数 reflectTest.print(); // flag is true Field field = reflectTest.getClass().getDeclaredField("value"); field.setAccessible(true); field.set(reflectTest, 1); reflectTest.getValue(); // 1 } catch (Exception e) { e.printStackTrace(); } } }
test.java 中有几个方法需要说明一下:
getClass() | 用于获取一个实例的类型类 比如:A a = new A(); 则 a.getClass() 就是 A.class |
getDeclaredMethod() | 用于获取类中定义的全部方法(包括私有方法) |
getDeclaredField() | 用于获取类中定义的全部变量(包括私有变量) |
从结果中可以看出,尽管在ReflectTest类中,flag 和value都被定义为私有变量,setFlag()也被定义为私有方法,但是通过反射机制,可以调用私有方法setFlag()修改flag的值,也可以直接修改私有变量value的值。
相关文章推荐
- java学习之理解反射机制
- Java学习之-----反射机制
- Java的动态性支持学习一 - 反射机制 概念概述
- java学习笔记09--反射机制
- Java中反射机制(Reflection)学习
- JAVA的反射机制--学习心得
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- Java的动态性支持学习二 - 反射机制 属性、方法、对象的操作
- java学习之反射机制
- java学习笔记---类型信息(type information)、反射机制与动态代理
- Java的反射(reflect)机制的学习
- 深入浅出学习hibernate框架(三):java的反射机制
- Java中反射机制(Reflection)学习
- Java的动态性支持学习三 - 反射机制 取消属性、方法、构造器的访问限制
- java学习之反射机制
- [学习小记]Java的反射机制
- 黑马程序员学习笔记之八(Java 反射机制)
- 深入浅出学习hibernate框架(三):java的反射机制
- java 反射机制学习(一)
- java 反射机制的学习