import java.lang.reflect.Constructor; import java.lang.reflect.Method; public class ReflectTest { public class Worker{ private String name = ""; public void setName(String name){ this.name = name; } public void work(){ System.out.println("worker "+name+" will work"); } } public static class SWorker{ private String name = ""; public void setName(String name){ this.name = name; } public void work(){ System.out.println("s worker "+name+" will work"); } } public static void main(String[] args) { try{ /* * 非静态内部类 */ ClassLoader loader = Thread.currentThread().getContextClassLoader(); //加载内部类名称的写法【包路径.主类名$内部类名】 Class clWorker = loader.loadClass("ReflectTest$Worker"); //通过以下输出语句可以看到,内部类的构造函数需要外部类做参数 System.out.println("worker's cons is:"+clWorker.getDeclaredConstructors()[0]); Constructor cons = clWorker.getDeclaredConstructor(ReflectTest.class); Worker worker = (Worker)cons.newInstance(new ReflectTest()); Method setMethod = clWorker.getMethod("setName",String.class); setMethod.invoke(worker,"张三"); Method workMethod = clWorker.getMethod("work"); workMethod.invoke(worker); /* * 静态内部类 */ Class clSWorker = loader.loadClass("ReflectTest$SWorker"); //获取构造方法不需要加额外参数 Constructor cons1 = clSWorker.getDeclaredConstructor(); SWorker sWorker = (SWorker)cons1.newInstance(); setMethod = clSWorker.getMethod("setName",String.class); setMethod.invoke(sWorker,"李四"); workMethod = clSWorker.getMethod("work"); workMethod.invoke(sWorker); }catch(Exception e){ e.printStackTrace(); } } }