黑马程序员技术交流社区

标题: Help。。。 [打印本页]

作者: 宋国涛    时间: 2011-9-21 10:48
标题: Help。。。
先贴出代码:[code=java]public static void main(String []args){
                try{
                        Class c = Class.forName(args[0]);
                        List list = (List)c.newInstance();
                        
                        for(int i=0;i<5;i++){
                                list.add("element"+i);
                        }
                        for(Object o:list.toArray()){
                                System.out.println(o);
                        }
                }catch(ClassNotFoundException e){
                        e.printStackTrace();
                }catch (InstantiationException e){
                        e.printStackTrace();
                }catch(IllegalAccessException e){
                        e.printStackTrace();
                }
        }[/code]

说明:写这段程序的目的是使用Class 的 newInstance()方法来实例化一个对象,但是程序调试时出现一点小问题,试着捕获了异常,可能是ClassNotFound 异常,但是输入了参数,运行结果还是一样,是什么原因呢?非常感谢。。。
作者: 匿名    时间: 2011-9-21 12:39
newInstance()这个方法只能使用在无参构造方法中,看下你的构造方法吧,在检查下路径.
作者: 王清云    时间: 2011-9-21 13:24
纠正下,楼主原来的代码可以使用,应该是你的args[0]写错了,上溯造型是安全的,可以直接传入java.util.ArrayList:
try{
                    Class c = Class.forName(args[0]);
                    List list = (List)c.newInstance();
                    
                    for(int i=0;i<5;i++){
                            list.add("element:"+i);
                    }
                    for(Object o:list){
                            System.out.println(o);
                    }
            }catch(ClassNotFoundException e){
                    e.printStackTrace();
            }catch (InstantiationException e){
                    e.printStackTrace();
            }catch(IllegalAccessException e){
                    e.printStackTrace();
            }
[ 本帖最后由 王清云 于 2011-09-21  21:54 编辑 ]
作者: 匿名    时间: 2011-9-21 18:11
应该是你的含main方法的编译之后的文件,找不到你传入的类的class,
试着把你要传参数的类,打包放到,classpaht环境变量里,在给主方法传参数的时候,要传完整报名,类名
作者: 匿名    时间: 2011-9-21 21:43
我怎么感觉上边的人说的都不是楼主问题真正所在,以下是我的理解,       
public static void main(String []args){
                        try{
[color=Red]//这里修改了你的源代码,问题就出在这里,肯定是你传入的args[0]参数有问题[/color]                                Class c = Class.forName("java.util.ArrayList");
                                List list = (List)c.newInstance();
                               
                                for(int i=0;i<5;i++){
                                        list.add("element"+i);
                                }
                                for(Object o:list.toArray()){
                                        System.out.println(o);
                                }
                        }catch(ClassNotFoundException e){
                                e.printStackTrace();
                        }catch (InstantiationException e){
                                e.printStackTrace();
                        }catch(IllegalAccessException e){
                                e.printStackTrace();
                        }
                }
出现了异常的时候一定不要慌,仔细看下,其实问题都很小。
作者: 匿名    时间: 2011-9-23 09:18
[quote]我怎么感觉上边的人说的都不是楼主问题真正所在,以下是我的理解,
public static void main(String []args){
try{
//这里修改了你的源代码,问题就出在这里,肯定是你传入的args[0]参数有问题 Class c = Class.forName("java.util.ArrayList");
[/quote]
已经找到问题了,确实是参数没有传进去,非常感谢。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2