1.用反射方式去执行某个类的main方法
首先,如一个下面代码的类
public class otherslei {要在另一个类中调用其main方法,可以直接使用
public static void main(String[] args) {
for(String arg:args)
System.out.println(arg);
}
}
otherslei.main(new String[]{"aaa","bbb","ccc"});这种形式~但如果是用反射的方式去调用的话,方法如下
String classname = args[0];//根据接收的第一个值的为类名Class clazz = Class.forName(classname);//创建相关字节码对象Method mMain = clazz.getMethod("main",String[].class);mMain.invoke(null,(Object)new String[]{"aaa","bbb"});因为args[0]要为类名,且为刚开始,所以使用时要在运行的类中配置下,使程序刚开始给程序传参,如图所示:
主代码如下:
public class reflectTest2 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
//otherslei.main(new String[]{"gaga","dsagkdjsa","dhsak"});
//假设在不知道类名的情况下,用反射的方式执行main方法
String classname = args[0];//根据接收的第一个值的为类名
Class clazz = Class.forName(classname);//创建相关字节码对象
Method mMain = clazz.getMethod("main",String[].class);
mMain.invoke(null,(Object)new String[]{"aaa","bbb"});
}
}
2.对数组进行反射
整个代码如下
int [] int1 = {1,5,6,87,4,6};
printObject(int1);
printObject("dahsaldhi");
}
public static void printObject(Object obj)
{
Class clazz = obj.getClass();
if(clazz.isArray())
{
//如果是数组
int len = Array.getLength(obj);//由Array的静态方法getLength得到数组长度
for(int i = 0;i<len;i++)
{
System.out.println(Array.get(obj, i));
}
}
else
{
//如果不是数组
System.out.println(obj);
}
}
3.反射的作用__实现框架功能
反射在编程里起的作用是实现框架,就像前面有段代码如下String classname = args[0];//根据接收的第一个值的为类名当一个项目分开来做时,在完全不知道另一个部分的类名是什么的时候,要先创建对象,进行自己代码部分的编写的话,采用
Class clazz = Class.forName(classname);//创建相关字节码对象
Class clazz = Class.forName(classname);
的形式,而classname则可以由配置文件进行配置,这样就实现了框架的功能.