import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class ReflectTest
{
public class Worker{
public void setName
(String name
){
this.name = name;
}
public void work(){
System.
out.
println("worker "+name
+" will work");
}
}
public static class SWorker{
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{
/*
* 非静态内部类
*/
//加载内部类名称的写法【包路径.主类名$内部类名】
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);
e.printStackTrace();
}
}
}