A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 永恒之翼网络 中级黑马   /  2012-5-27 23:34  /  1413 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package cn.itcast.Enumeration;

public class TextArguments {

        /**
         * @param args
         */
        public static void main(String[] args) {
                for(String s:args){
                        System.out.println(s);
                }
        }

}


String arg=args[0];
                Method mainMethod = Class.forName(arg).getMethod("main", String[].class);//找不到“TextMain”的异常,forName()
//                方法要完整的类名,就是包名加类名的字符串。
//                mainMethod.invoke(null, new String[]{"你好","hello,world!","very good!"});//" wrong number of arguments",这是因为
//                invoke()方法里有多参数引起的,1.4里的多参是以数组的表示的,而1.5以后是以“...”的形式表示。但是main方法只能接受一个String[]类型,这样编译器
//                会报错。解决的方法有一下几种为了向下兼容,所以编译器采用
//                1.4规范,这样String[]就会先分为三个String类型的参数传递给main方法,
                mainMethod.invoke(null, new Object[] {new String[]{"你好","hello,world!","very good!"}});//因为编译器要根据1.4规范
//                将数组先拆分一次,所以就把String[]数组存放到Object[]中,让编译器去拆分。
                mainMethod.invoke(null, (Object) new String[] {"sss","yyy","jjj"});//把String[]强转换为Object对象,编译器发现是一个
//                对象时,就不会去拆分它。

我觉得上面的那道题和下面的那道题在理解上有矛盾。
int[] a = new int[] {45,68,23,15};

String[] s = new String[]{"abc","ssjiala"};
System.out.println(a);
System.out.println(s);
System.out.println(Arrays.asList(a));
System.out.println(Arrays.asList(s));
运行结果:[I@18a992f
[Ljava.lang.String;@4f1d0d
[[I@18a992f]
[abc, ssjiala]
之所以打出来的是[[I@18a992f],是因为在1.4版中asList()方法是就多参的,以
Object[]来表示,一个一维的int数组是一个Object对象,而不是Object数组,
1.5版中的多参是以“...”表示的,于是把a做为一个int数组存储到List中,也没有把它分成一个一个int数存进去。是int数组打印出来的应该就地址。

传入main方法的是String[] args,传入asList方法的1.5版是asList(T... a),1.4版是asList(Object[]  a),那为什么传new String[]{"你好","hello,world!","very good!"}),要理解“为了向下兼容,所以编译器采用1.4规范,这样String[]就会先分为三个String类型的参数传递给main方法,”呢?如果这样理解就和后面的那道题相矛盾。“System.out.println(Arrays.asList(s));”中为什么不把s才分成两个字符串传给asList,报IllegalArgumentException异常呢?
请高手解答一下。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马