JAVA基础加强之反射2

时间:2021-12-18 19:42:54


1.用反射方式去执行某个类的main方法

首先,如一个下面代码的类

public class otherslei {

public static void main(String[] args) {
for(String arg:args)
System.out.println(arg);

}

}
要在另一个类中调用其main方法,可以直接使用

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]要为类名,且为刚开始,所以使用时要在运行的类中配置下,使程序刚开始给程序传参,如图所示:

JAVA基础加强之反射2

主代码如下:

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则可以由配置文件进行配置,这样就实现了框架的功能.