本帖最后由 何俊森 于 2013-4-27 11:01 编辑
//DemoTest- package org.klaus.reflecttest;
- public class DemoTest {
- class Demo{
- public void show(){
- System.out.println("这是内部类中的方法!");
- }
- }
- }
复制代码 //InvokeShowDemo- import java.lang.reflect.Constructor;
- import java.lang.reflect.Method;
- public class InvokeShowDemo {
- /**
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- Class<?> c1 = Class.forName("org.klaus.reflecttest.DemoTest"); //实例化Class对象
- //System.out.println(c1.getDeclaredClasses().length);只有一个默认构造函数
-
- Class<?> c2 = c1.getDeclaredClasses()[0]; //实例化内部类Class对象
- //System.out.println(c2.getName());
-
- //System.out.println(c1.getDeclaredConstructors().length); 只有一个默认构造函数
- // Constructor<?> c = c1.getConstructors()[0]; //获取默认构造函数 ,也可以用这种方法来实例化内部类
-
- //System.out.println(c2.getDeclaredConstructors().length);
- Constructor<?> cDemo = c2.getDeclaredConstructors()[0]; //获取默认构造函数
-
- cDemo.setAccessible(true);//仅当内部类是public时,不用设置为true
- Object obj = cDemo.newInstance(c1.newInstance()); //实例化内部类,需要外围类的一个实例
- Method met = c2.getMethod("show"); //获取内部类中的方法
-
- // met.setAccessible(true); //仅当要获取的方法是public时,不用设置访问true;
- //System.out.println(met.getName());
- met.invoke(obj); //调用内部类中的方法
- }
- }
复制代码 |