【Java】java使用反射访问对象方法和成员变量
来源:互联网 发布:pdf压缩软件 for mac 编辑:程序博客网 时间:2024/05/21 15:41
虽然java是一门静态语言,但是java的反射机制却给java提供了很强大的动态特性,其特点是能让java支持在运行时才能得知名称与内部结构的类,并能访问其所有的方法和成员变量,包括私有方法和私有成员变量。下面我写了一个比较简洁的测试代码,供参考和使用。
测试类
//OBClass.javapackage com.obo.javaassistdemo;public class OBClass { public int publicField= 999; private int privateField = 234; public static void main(String[] args) { System.out.println("hello world" + new OBClass().privateField); new OBClass().privateMethod(); } public void publicMethod() { System.out.println("test public method"); } public void publicMethodWithParam(String param) { System.out.println("test publicMethodWithParam's param is " + param); } private void privateMethod() { System.out.println("test private method"); } public static void staticMethod() { System.out.println("test static method"); }}
利用反射来调用测试类的方法和成员变量。
//JavaAssistDemo.javapackage com.obo.javaassistdemo;import java.io.IOException;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import javassist.CannotCompileException;import javassist.NotFoundException;/** * Created by obo on 16/2/5. */public class JavaAssistDemo { public static void main(String []args) throws NotFoundException, CannotCompileException, IOException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException { reflex(); } //反射 private static void reflex() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, NoSuchFieldException { //创建一个OBClass实例对象 OBClass obClass = new OBClass(); //获取OBClass的类对象 Class myClass = OBClass.class; /// 无参数的public方法 //反射回去OBClass中的方法名为publicMethod的方法 Method publicMethod = myClass.getDeclaredMethod("publicMethod"); //更改publicMethode方法的可访问属性为public //访问publicMethod方法 publicMethod.invoke(obClass); /// 带参数的public方法 //反射回去OBClass中的方法名为publicMethod的方法 Method publicMethodWithParam = myClass.getDeclaredMethod("publicMethodWithParam",String.class); //更改publicMethode方法的可访问属性为public //访问publicMethod方法 publicMethodWithParam.invoke(obClass,"hello"); /// 无参数的private方法 //反射回去OBClass中的方法名为publicMethod的方法 Method privateMethod = myClass.getDeclaredMethod("privateMethod"); //更改privateMethod方法的可访问属性为public,要想访问private方法必须要修改这一项 privateMethod.setAccessible(true); //访问privateMethod方法 privateMethod.invoke(obClass); /// 无参数的static方法 //反射回去OBClass中的方法名为publicMethod的方法 Method staticMethod = myClass.getDeclaredMethod("staticMethod"); //访问static方法,静态方法的时候可以使用类对象作为参数 staticMethod.invoke(myClass); /// 获取public 成员变量 Field publicField = myClass.getDeclaredField("publicField"); publicField.setAccessible(true); System.out.println("" + publicField.getInt(obClass)); /// 获取private 成员变量 Field privateField = myClass.getDeclaredField("privateField"); privateField.setAccessible(true); System.out.println("" + privateField.getInt(obClass)); }}
上面分别提供了多种方法和成员变量的访问方式,可以组合起来进行使用。
有了java的反射机制,我们可以实现非常有意思也非常灵活的功能,比如说可以使用java类来创建数据库表的映射、也可以与javaassist的联合起来用于修改第三方api等。
1 0
- 【Java】java使用反射访问对象方法和成员变量
- Java通过反射访问私有成员变量和私有方法
- 通过Java反射机制获取对象、方法和成员变量
- java 反射,访问成员变量
- 使用java反射操作类的构造函数,成员变量和成员方法
- java反射之访问成员变量代码
- java反射访问私有成员变量
- java反射访问私有成员变量
- Java反射---Class对象,获得类的方法、成员变量和构造函数信息
- Adnroid ndk 中jni访问java方法、对象、成员变量
- 【Java-Reflection】Class以及反射成员变量和方法
- JAVA之通过反射遍历JavaBean成员变量和方法
- 【转载】JAVA利用反射机制访问private成员和方法
- java中用反射访问私有方法和私有成员
- Java中的null对象也可以访问static成员变量和方法
- java 使用反射机制来获取私有方法和成员变量
- Java利用反射操作成员变量,方法
- Java中方法和成员变量的访问控制
- LeetCode Maximum Depth of Binary Tree
- https原理:证书传递、验证和数据加密、解密过程解析
- [Leetcode]188. Best Time to Buy and Sell Stock IV@python
- HDU 2066 一个人的旅行 (最短路----floyd && dijkstra)
- Android开发学习之路--UI之基本布局
- 【Java】java使用反射访问对象方法和成员变量
- 应用层数据库读写分离db-loadbalance
- Codeforces 542F 构造
- 第7讲项目1——正差值
- hdu 1551 Cable master
- MVC中单独配置Log4Net
- 共模电感
- 数据结构实验之排序五:归并求逆序数
- android 加载大图片适配问题解决方案