用java反射机制来测试其他类中的私有方法

标题:面试的时候,有时候面试官问:一个类中具体私有方法,请问用什么方法测试?

方法:结合自己的总结,使用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;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值