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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋国涛 黑马帝   /  2011-9-21 10:48  /  2400 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

先贴出代码:[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 异常,但是输入了参数,运行结果还是一样,是什么原因呢?非常感谢。。。

5 个回复

倒序浏览
黑马网友  发表于 2011-9-21 12:39:14
沙发
newInstance()这个方法只能使用在无参构造方法中,看下你的构造方法吧,在检查下路径.
回复 使用道具 举报
纠正下,楼主原来的代码可以使用,应该是你的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 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题有分!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-21 18:11:09
板凳
应该是你的含main方法的编译之后的文件,找不到你传入的类的class,
试着把你要传参数的类,打包放到,classpaht环境变量里,在给主方法传参数的时候,要传完整报名,类名

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-21 21:43:41
报纸
我怎么感觉上边的人说的都不是楼主问题真正所在,以下是我的理解,       
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();
                        }
                }
出现了异常的时候一定不要慌,仔细看下,其实问题都很小。

评分

参与人数 1技术分 +2 收起 理由
admin + 2 解决问题了,加分!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-23 09:18:56
地板
[quote]我怎么感觉上边的人说的都不是楼主问题真正所在,以下是我的理解,
public static void main(String []args){
try{
//这里修改了你的源代码,问题就出在这里,肯定是你传入的args[0]参数有问题 Class c = Class.forName("java.util.ArrayList");
[/quote]
已经找到问题了,确实是参数没有传进去,非常感谢。。。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马