java se 学习笔记 之 reflection(在类外部调用private成员的方式)5
来源:互联网 发布:全景效果图制作软件 编辑:程序博客网 时间:2024/06/06 01:52
1. 目标操作类的定义如下
public class Private {private String name="lisi" ;public String getName(){return name;} //定义一个私有的操作方法sayHello
private String sayHello(String name){return "hello "+name;}}
2. 定义一个客户端类通过反射的方式来调用目标类Private中的私有成员(成员方法和成员变量),代码如下:
import java.lang.reflect.Method;public class TestPrivate {/** * @param args */public static void main(String[] args) throws Exception{//目标操作类PrivatePrivate p = new Private();//通过 Private的对象p得到给类对应Class类的对象Class<?> clazz = p.getClass();//getMethod()只返回Public的方法//getDeclaredMethods();可以返回所有的函数,包括private 的函数Method method = clazz.getDeclaredMethod("sayHello",new Class[]{String.class});//设置该方法可访问,设置为false时,则私有方法不可以访问,私有属性也是如此//该行的目的是压制java访问权限检查器,不让其来进行访问权限的检查,让该方法可以被外部可见method.setAccessible(true);//执行目标对象的method方法,以Object对象数组的形式传入参数String str = (String)method.invoke(p, new Object[]{"zhangsan"});System.out.println(str);}}
3. 在客户端类中修改private的成员变量
import java.lang.reflect.Field;public class TestPrivate2 {/** * @param args */public static void main(String[] args) throws Exception{// TODO Auto-generated method stubPrivate p = new Private();Class<?> c = p.getClass();Field field = c.getDeclaredField("name");//压制java对修饰符的检查,让该private成员属性对外可见field.setAccessible(true);//压制java对修饰访问符的检查//修改目标对象p中的属性fieldfield.set(p, "zhangsan");System.out.println(p.getName());}}
以上,所有的reflection(反射机制)就结束了!大家可以多沟通,相互学习!
- java se 学习笔记 之 reflection(在类外部调用private成员的方式)5
- private成员函数竟然可以在类的外部调用
- java se 学习笔记 之 reflection(反射机制)1
- java se 学习笔记 之 reflection(完成一个对象copy的demo)4
- java se 学习笔记 之 reflection(反射机制之Array_1)2
- java se 学习笔记 之 reflection(反射机制之Array_2)3
- Java学习笔记之反射(Reflection)
- Java学习笔记之反射(Reflection)
- Java Reflection 学习笔记
- JAVA SE学习笔记
- JAVA SE 学习笔记
- java se 学习笔记
- Java se 学习之 java概述人机交互方式
- Java SE 自学笔记4 之面向对象的类
- 在外部调用私有成员函数的方法
- Java Reflection(反射) 入门学习笔记 之二 (Invoke)
- Java Reflection(反射) 入门学习笔记 之三 (Array)
- 在Java内部类中使用外部类的成员方法以及成员变量
- DB Practice
- 对做需求分析的一些感受
- pku acm 1006
- 让 Android 支持下拉刷新(Pull Refresh)
- 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序
- java se 学习笔记 之 reflection(在类外部调用private成员的方式)5
- 被127次掌声打断的浙江大学教授郑强的经典语录
- Linux异步 I/O 大大提高应用程序的性能
- 使用Eclipse中提供的Refactor(重构)工具
- JAVAEE5 VS JAVAEE6
- lr监控linux
- 如何用UIGestureRecognizer去侦测使用者输入
- 清空文件和清空文件夹的方法+cp,mv,rm
- ListView控件的简单查询功能