Java反射机制调用私有方法

今天来讲讲 Java的反射机制如何调用其他类的 private 方法

主要有两个重点,一是调用的是getDeclaredMethod

     二是****调用private方法的最最关键一句话  *********
   strMethod.setAccessible(true);

上代码

package com.fs.reflect;
/*
 * 定义一个Person类
 */
public class Person {

	/*
	 * 下面主要是反射调用调用两个add方法
	 */
	public String address;
	public int phone;
	public int add(int num1,int num2){
		System.out.println("Person --->num1+num2="+(num1+num2));
		return num1+num2;
	}
	public int add(int num1) {
		System.out.println("num1 = "+num1);
		return num1;
	}
	
	private String add(String data) {
		System.out.println("Person ---> data = "+data);
		return data;
	}

}

package com.fs.reflect;

import java.lang.reflect.Method;

public class Main {
	
	public static void main(String[] args) throws Exception {
		//找到要反射的类,并创建实例
		Person p = new Person();
		Class<?> cp = p.getClass();
		Object invokeAdd = cp.newInstance();
		/*
		 * 参数一是方法名,当然你可以先把所有方法打印出来看看,这在上一篇内容已经说过,不懂的去上一篇看看
		 * 参数二是为了区分函数重载,按照参数个数不同加以区分,两个
		 * */
		//addMethod是获取类的方法
		Method addMethod = cp.getMethod("add", new Class[]{int.class,int.class});
		//用类的对象去调用函数,因为不知道有没有返回值,
		//有返回值时又不知道其类型,所以用Object存储,最后强转为你需要的类型即可
		Object result = addMethod.invoke(invokeAdd, new Object[]{4,6});
		//转为int类型的值,自动装拆箱
		System.out.println((Integer)result);
		/**
		 * 打印结果如下
		 * Person --->num1+num2=10
		 * 10
		 * 
		 */
		
		/**
		 * 公有方法可以调用,那私有方法呢?
		 */

		Method strMethod = cp.getDeclaredMethod("add", new Class[]{String.class});
		// ****调用private方法的最最关键一句话  *********
		strMethod.setAccessible(true);
		//用类的对象去调用函数,因为不知道有没有返回值,
		//有返回值时又不知道其类型,所以用Object存储,最后强转为你需要的类型即可
		Object res = strMethod.invoke(invokeAdd, new Object[]{"private method run"});
		System.out.println((String)res);
		/**
		 * 打印结果如下
		 * Person ---> data = private method run
		 * private method run
		 * 
		 */
		
		/**
		 * 连私有方法都能调用,请问你有什么事不能干呢?调用私有成员也是类似操作,赶紧试试吧
		 */
		
		
	}
}

赶紧练习练习吧

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值