String strArr = new String[]{"str1", "str2", "str3", "str4", "str5", "str6"};
//String strArr = new String[6]{"str1", "str2", "str3", "str4", "str5", "str6"}; //error
技术要点:main()方法只接受一个参数,String[]也是一种类型
public class TestMain{
public static void main(String[] args){
if(args == null){
System.out.println("args is null");
return;
}
for(String str : args)
System.out.print(str + " ");
System.out.println();
}
}
技术要求:1、使用反射调用其它类的main方法
技术要点:1、main()的第一个参数时类名
2、避免编译器对数组进行拆分,使用Object对数组进行封装
public class Test{
public static void main(String[] args){
String className = args[0];
String[] args = new String[]{"str1", "str2", "str3"};
Method mainMethod = Class.forName(className).getMethod("main", 5);
//TestMain.main(args); //通过类型静态方法调用
//mainMethod.invoke(null, args); //error, JDK1.5中,编译器把args拆分成3个参数
mainMethod.invoke(null, (Object)args);
mainMethod.invoke(null, new Object[]{args});
}
}
技术要点:数组是一个Object,基本类型的一维数组是一个Object
int[] a1 = new int[3]{1, 2, 3};
Integer[] a2 = new Integer[4];
int[][] aa1 = new int [2][3];
String[] strArr = new String[]{"A", "B", "C"};
Object obj1 = a1; //一维数组是一个Object
Object obj2 = a2;
//Object[] obj3 = a1; //error,Object[]中不能装基本类型
Object[] obj4 = aa1; //Object[]中装的是一维数组
技术要求:打印基本类型数组的数据列表,不能使用for
给的参数是一个数组,打印数组内的元素;给的参数不是是数组,打印该对象
技术要点:使用反射
数组反射的一个应用
问题引出:
System.out.println(Arrays.asList(a1)); //output: [I0cfb549 JDK1.5 asList(T...a) a1当成一个对象
System.out.println(Arrays.asList(strArr)); //output: A B C JDK1.4 asList(Object[] a) strArr当成了数组
public static void printObject(Object obj){
Class class = obj.getClass();
if(class.isArray()){
//System.out.print(obj.toString() + ": ");
int len = Array.getLength(obj);
for(int i = 0; i < len; i++){
System.out.print(Array.get(obj, i) + " ");
}
System.out.println();
}else{
System.out.println(obj);
}
}
//main
printObject(a1); //output: 1 2 3
printObject(strArr); //output: A B C
printObject("abc"); //output: abc |
|