黑马程序员技术交流社区

标题: 反射的静态方法怎么拿不到呢?哪里出问题了么 [打印本页]

作者: 任献东    时间: 2014-10-18 21:07
标题: 反射的静态方法怎么拿不到呢?哪里出问题了么
本帖最后由 任献东 于 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"
作者: 任献东    时间: 2014-10-18 21:17
啊  知道了 忘了取消java检查功能
作者: 哈达洋    时间: 2014-10-18 21:46
本帖最后由 哈达洋 于 2014-10-18 21:51 编辑

getDeclaredMethod()这个方法,只是让你能拿到包括私有和保护等的所有方法,并不是说可以用invoke去调用它底层的方法。你要调用它,还需要用到setAccessible(boolean flag)这个方法去设置取消java语言的访问检查。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2