前言:本博客内容由张孝祥java高新技术反射篇整理而来
1.一个静态方法,如果传递过来的是对象,则直接调用该对象的toString()方法打印出来,如果是数组,则把数组中的每个元素打印出来。
//如果是对象则直接打印出来,是数组则挨个打印出来
class arrayReflect{
public static void main(String[] args) {
Person person = new Person("张三三", "男");
printObject(person);
Object[] intarrays=new Object[]{'a','b','c',1,2,3,4,5};
printObject(intarrays);
}
public static <T> void printObject(T t){
Class<? extends Object> clazz = t.getClass();
if (clazz.isArray()) {
//获取数组的长度
int length = Array.getLength(t);
for (int i = 0; i < length; i++) {
//打印数组中的值
System.out.println(Array.get(t, i));
}
return;
}
System.out.println(t);
}
}
输出结果:
Person [name=张三三, sex=男]
a
b
c
1
2
3
4
5
2.一个静态方法,执行该方法后,需在控制台中输入一个全类名,按回车键后,会直接调用这个类的main方法。
// 输入相应全类名 调用该类的main方法
class runArguments {
public static void main(String[] args) throws ClassNotFoundException,
NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, IOException {
runMainInputForName();
}
@SuppressWarnings("resource")
private static void runMainInputForName() throws ClassNotFoundException,
NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
Scanner scan = new Scanner(System.in);
String className = scan.nextLine();
Class<?> clazz = Class.forName(className);
Method method = clazz.getMethod("main", String[].class);
// 调用静态方法
method.invoke(null, (Object) new String[] {});
}
}
输入:
com.dao.chu.movie.arrayReflect
输出:
Person [name=张三三, sex=男]
a
b
c
1
2
3
4
5