Exception in thread "main" java.lang.NoSuchMethodException: com.anbo.reflect.classinfo.Person.setNam
来源:互联网 发布:linux 怎么指定核运行 编辑:程序博客网 时间:2024/06/03 22:41
如果把Person类的setName方法的访问权限设为私有
private void setName(String name){
this.name=name;
}
这是再运行程序,则会抛出NoSuchMethodException异常
Exception in thread "main" java.lang.NoSuchMethodException: com.anbo.reflect.classinfo.Person.setName(java.lang.String)
at java.lang.Class.getMethod(Class.java:1607)at com.anbo.reflect.classinfo.TestReflection4.main(TestReflection4.java:18)
为什么会出现该错误呢?
这是因为当通过Method的invoke()方法调用对应的方法时,Java会要求程序必须有调用该方法的权限。如果程序确实需要调用某个对象的private方法,可以先调用setAccessible(Boolean flag)方法。将Method对象的Accessible标志设置为指示的布尔值,值为true则表示该Method在使用时应该取消Java语言访问权限检查。值为false则表示该Method在使用时应该实施Java语言访问权限检查。
解决方案:
1. 将Person类中setName方法的访问权限设为public(在不需要调用某个对象的private方法)
2. 不改变私有访问权限,先调用setAccessible(true)方法取消Java语言访问权限检查,在调用需要调用的方法。(确实需要调用某个对象的private方法)
//获取cla对象的指定方法"setName“方法
Method m=cla.getDeclaredMethod("setName", String.class);
//取消Java语言访问权限检查
m.setAccessible(true);
//调用m方法,传入参数
m.invoke(p, "huahua");
//获取cla对象的指定方法"getName()"方法
Method method=cla.getMethod("getName", null);
//调用method方法,传入参数
Object o=method.invoke(p, null);
System.out.println(o);
控制台打印结果:
- Exception in thread "main" java.lang.NoSuchMethodException: com.anbo.reflect.classinfo.Person.setNam
- Eclipse Exception in thread "main" java.lang.NoSuchMethodException
- Exception in thread "main" java.lang.NoSuchMethodException: xxx.main([Ljava.lang.String;)
- RPC小例子解决Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
- Exception in thread "main" java.lang.NoClassDefFoundError
- Exception in thread "main" java.lang.NoClassDefFoundError
- Exception in thread "main" java.lang.NoClassDefFoundError
- Exception in thread "main" java.lang.NoClassDefFoundError
- Exception in thread "main" java.lang.NoClassDefFoundError:
- Exception in thread "main" java.lang.NoClassDefFoundError
- Exception in thread "main" java.lang.NoClassDefFoundError
- Exception in thread "main" java.lang.NoClassDefFoundError
- Exception in thread "main" java.lang.NoClassDefFoundError
- Exception in Thread main java.lang.NoClassDefFoundError
- Exception in thread "main" java.lang.NoClassDefFoundError
- Exception in thread "main" java.lang.NoClassDefFoundError
- Exception in thread "main" java.lang.NoClassDefFoundError
- Exception in thread "main" java.lang.ClassCastException
- MapReduce之二——收入支出数据处理与自定义排序
- iOS开发之xib技巧介绍
- Linux系统结构 详解
- CentOS Linux下VNC Server远程桌面配置详解
- IOS成长之路-使用xib界面与和代码相关联的方法
- Exception in thread "main" java.lang.NoSuchMethodException: com.anbo.reflect.classinfo.Person.setNam
- android 百度地图 在打包签名后key验证失败的解决方案
- onInterceptTouchEvent()和onTouchEvent()总结
- Linux信号处理机制
- C++程序实例
- 博弈知识汇总
- 使用SWRevealViewController实现侧边菜单功能详解
- Nginx 重写URI
- Java swing 如何让垂直滚动条始终在最下面