用java反射机制来测试其他类中的私有方法
来源:互联网 发布:大思英语网络课程转让 编辑:程序博客网 时间:2024/04/29 20:59
标题:面试的时候,有时候面试官问:一个类中具体私有方法,请问用什么方法测试?
方法:结合自己的总结,使用java反射机制来测试
步骤如下:
1.用待测试类person,创建一个实例person
2.传进方法名和参数列表,取得相应的方法
3,。知道是私有方法,根据method实例设置Accessible标记,设置为true表示反射的对象在访问时取消访问权限
<1>.method.getAccessible()返回的值始终是false,就是需要使用对象之前检查权限
<2>.和实体类中方法修饰无关,比如方法名修饰为public,设置setAccessible(false)时也要检查,只是此时检查与否都可以被其他地方引用
如果是private,protected,friendly修饰的方法时,设置setAccessible(false)时就能有它的效果
4.下面的代码将演示java反射机制的使用,用来测试其他类中的私有方法并修改属性值
5.运行之后,将会传进Person类work方法中Stone,有相应的输出,同时修改了username,并输出person,修改了toString方法,输出usename值,具体如下:
import java.lang.reflect.Field;import java.lang.reflect.Method;/** * @author 张乾坤 */public class TestClassUseRefect {public static void main(String[] args) throws Exception{Person person = new Person();//now test the class person's private method//根据指定的方法名、参数类型来取得Person类中的方法Method method = person.getClass().getDeclaredMethod("work", String.class);Field field = person.getClass().getDeclaredField("username");//修改该私有方法的权限method.setAccessible(true);field.setAccessible(true);//测试Person类中的私有方法,对私有变量赋值,method.invoke(person, "Stone");field.set(person, "china");System.out.println(person);}}class Person{private String username;private void work(String str){System.out.println("i can work with:"+str+" normally");}public String toString(){return "this is the person class,and username is :"+username;}}
0 0
- 用java反射机制来测试其他类中的私有方法
- 使用Java反射机制实现访问其他类的私有方法
- 使用Java反射机制实现访问其他类的私有方法
- 使用Java反射机制实现访问其他类的私有方法
- 如何使用java反射机制测试私有方法
- 利用反射机制访问类中的私有方法
- 利用反射机制访问类中的私有方法
- 使用Java反射机制实现访问类中的私有变量或者方法
- java利用反射来调用一个类的私有方法
- java中的反射机制——如何访问私有成员的私有方法
- Java通过反射调用其他类的私有属性和私有方法
- 利用java反射机制调用类的私有方法
- JAVA反射机制调用源类的私有方法
- java如何利用反射机制调用类的私有方法
- java反射机制怎样调用类的私有方法?
- Java反射机制访问类私有方法和变量
- Java反射机制调用私有方法
- java反射机制调用私有方法
- 21、日期及其格式
- Android Matrix
- cocos2dx创造精灵的五种方法
- 单链表反转
- mono3.2.3+Jexus5.5+openSuSE13.1的asp.net
- 用java反射机制来测试其他类中的私有方法
- 【C语言代码】大数N的阶乘!
- test Week3
- 【Hadoop进阶之路】Hadoop部署过程中遇到的问题
- 一个Java程序员应该掌握的10项技能
- 麦博FC330低音炮拆机图(简易版)
- 记录一次让我吐血的spring3 MVC HTTP406 Json转换错误
- Dev 控件之GridControl
- 印度国王被国际象棋发明者坑死了