A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 任献东 于 2014-10-18 21:09 编辑
  1. import java.lang.reflect.InvocationTargetException;
  2. import java.lang.reflect.Method;

  3. public class Test_fanshe1 {

  4.         public static void main(String[] args) {
  5.            Class<myclassprint>  clazz = myclassprint.class;
  6.                    try {
  7.                         Method method = clazz.getDeclaredMethod("print");
  8.                         method.invoke(clazz.newInstance());
  9.                 } catch (NoSuchMethodException e) {
  10.                         // TODO 自动生成的 catch 块
  11.                         e.printStackTrace();
  12.                 } catch (SecurityException e) {
  13.                         // TODO 自动生成的 catch 块
  14.                         e.printStackTrace();
  15.                 } catch (IllegalAccessException e) {
  16.                         // TODO 自动生成的 catch 块
  17.                         e.printStackTrace();
  18.                 } catch (IllegalArgumentException e) {
  19.                         // TODO 自动生成的 catch 块
  20.                         e.printStackTrace();
  21.                 } catch (InvocationTargetException e) {
  22.                         // TODO 自动生成的 catch 块
  23.                         e.printStackTrace();
  24.                 } catch (InstantiationException e) {
  25.                         // TODO 自动生成的 catch 块
  26.                         e.printStackTrace();
  27.                 }
  28.                
  29.         }

  30. }
  31. class myclassprint{
  32.         
  33.         private void print(){
  34.                 System.out.println("hello heima");
  35.         }
  36. }
复制代码

getDeclaredMethod()这个方法不是能拿到包括私有 保护在内的所有方法么?
为什么报错了
java.lang.IllegalAccessException: Class 黑马练习4.Test_fanshe1 can not access a member of class 黑马练习4.myclassprint with modifiers "private"

2 个回复

倒序浏览
啊  知道了 忘了取消java检查功能
回复 使用道具 举报
本帖最后由 哈达洋 于 2014-10-18 21:51 编辑

getDeclaredMethod()这个方法,只是让你能拿到包括私有和保护等的所有方法,并不是说可以用invoke去调用它底层的方法。你要调用它,还需要用到setAccessible(boolean flag)这个方法去设置取消java语言的访问检查。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马