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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 回首、后_街 于 2013-4-27 20:44 编辑

  //内部类信息
public class Demoto6 {
   class Demo{
   public void  show(){
       System.out.print("内部类中信息。。。。。");
      }
}
}
   Demoto6.Demo demo = new Demoto6().new Demo();
    demo.show();//调用内部类方法
    //如何使用反射机制获取Demoto6类中的内部类
   Class<?> clazz  = Class.forName("com.java.oop.to.Demoto6");
    Method method = clazz.getDeclaredMethod("show");
    Object obj = clazz.newInstance();
    method.invoke(obj);

//想要访问Demoto6类中的Demo内部类中的show()方法  找了挺多资料 不知道怎么弄   

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

1 个回复

正序浏览
本帖最后由 何俊森 于 2013-4-27 11:01 编辑

//DemoTest
  1. package org.klaus.reflecttest;
  2. public class DemoTest {
  3.         class Demo{
  4.                 public void show(){
  5.                         System.out.println("这是内部类中的方法!");
  6.                 }
  7.         }
  8. }
复制代码
//InvokeShowDemo
  1. import java.lang.reflect.Constructor;
  2. import java.lang.reflect.Method;

  3. public class InvokeShowDemo {

  4.         /**
  5.          * @param args
  6.          * @throws Exception
  7.          */
  8.         public static void main(String[] args) throws Exception {
  9.                 // TODO Auto-generated method stub
  10.                 Class<?> c1 = Class.forName("org.klaus.reflecttest.DemoTest"); //实例化Class对象
  11.                 //System.out.println(c1.getDeclaredClasses().length);只有一个默认构造函数  
  12.                
  13.                 Class<?> c2 = c1.getDeclaredClasses()[0];           //实例化内部类Class对象
  14.                 //System.out.println(c2.getName());
  15.                
  16.                 //System.out.println(c1.getDeclaredConstructors().length);  只有一个默认构造函数
  17.                // Constructor<?> c = c1.getConstructors()[0];    //获取默认构造函数 ,也可以用这种方法来实例化内部类
  18.                
  19.                 //System.out.println(c2.getDeclaredConstructors().length);
  20.                 Constructor<?> cDemo = c2.getDeclaredConstructors()[0];  //获取默认构造函数
  21.                
  22.                 cDemo.setAccessible(true);//仅当内部类是public时,不用设置为true
  23.                 Object obj = cDemo.newInstance(c1.newInstance()); //实例化内部类,需要外围类的一个实例
  24.                 Method met = c2.getMethod("show");  //获取内部类中的方法
  25.                
  26.                 // met.setAccessible(true); //仅当要获取的方法是public时,不用设置访问true;
  27.                 //System.out.println(met.getName());
  28.                 met.invoke(obj); //调用内部类中的方法
  29.         }

  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
王怀亮 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马