栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用反射调用私有方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用反射调用私有方法

使用反射调用私有方法

获取私有方法的步骤:
1.获取目标类
2.获取目标方法

Method method=clazz.getDeclaredMethod(name);//可以调用类中的所有方法(不包括父类中继承的方法)
Method method=clazz.getMethod(name);//可以调用类中有访问权限的方法(包括父类中继承的方法)

3.method.toGenericString()或method.toString()方法来输出方法的字符串形式

toGenericString()
返回描述此 Method 的字符串,包括类型参数。

toString()
返回描述此 Method 的字符串。

4.使用invoke()方法调用方法
案例:
1.创建一个Person类,写几个方法

package yaya;

public class Person {
    public void eat() {
        System.out.println("我在吃");
    }
    public void run() {
        System.out.println("我在跑");
    }
    //加个私有方法,用于测试
    private void eat(String name) {
        System.out.println("我是"+name+",我在吃");
    }
    public void eat(String name,int count) {
        System.out.println("我是"+name+",我在吃"+count+"只牛蛙");
    }
 
}

2.使用反射调用私有方法

package yaya;
 
import java.lang.reflect.Method;
 

public class ReflectDemo5 {
 
    public static void main(String[] args) throws Exception {
      //通过Class的静态方法forName加载Person
        Class cls=Class.forName("yaya.Person");
        //实例化对象的方法
        Object o=cls.newInstance();
        
        Method m= cls.getDeclaredMethod("eat",String.class);
        //在访问私有方法前设置访问操作(不设置直接调用会报错)
        m.setAccessible(true);
        m.invoke(o,"佩奇");
         
    }
 
}

注意:使用继承父类(AccessibleObject类)来的setAccessible()方法,来设置或取消访问检查,以达到访问私有对象的目的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327750.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号