我们一直在学反射,反射到底是用来干什么的? 我一直也很迷糊.直到今天,终于搞清楚了。
打个比方,在JavaWeb中,如果我们想要通过用户提交的数据来决定具体调用哪个类来执行相应的功能。
没有接触到发射之前我们可能会觉得 我们可以进行多个 switch 或者 if ,这样不是不可以,但是 这样程序的编制就会变得很麻烦,代码很臃肿。
反射就很好的解决了这个问题 实时的动态的加载一个类 并执行功能。
下面就结合一个 通过执行带参数的 main方法 反射调用另一个main方法
pavkage me.test ;//打包
import java.lang.reflect.* ;//导入反射包
public class ReflectTest //一个源文件只有一个publuc类
{
public staitc void main(String []args)
{
Method m1=Class.forName(args[0]).getMethod("main",String[].class) ;//获得mian方法对应的Method类
m1.invoke(m1,new Object[]{new String[]{"me.test.Test"}}) ; // 这两种方法执相同的功能
m1.invoke(m1,(Object)new String[]{"1111","2222","3333"}) ; //这两种方法执相同的功能但是
// 我们要注意 mian方法的参数 接收的时候要进行接 解包,如果第一种外面不加 Object类型的话 那么就会报错 ,解包完成之后 剩下的就是我们的参数了
//第二个是吧 数组 转换成了 Object对象 告诉 编译器 不需要进行解包了 ,因为数组类型也是从 Object而来的
}
}
class Test
{
public static void main(String[] args)
{
for(String ar:args)
{
System.out.println(ar) ;
}
}
}