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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 聂斌 中级黑马   /  2013-4-7 18:13  /  1582 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



                //使用MyClassLoader加载器加载一个类,itcastlib(目录)是main方法的参数,这个加载器默认是挂到系统加载器下面,作为系统加载器的孩子
                //父类只能加载这个cn.itcast.day2.ClassLoaderAttachment(带包名)
                Class clazz = new MyClassLoader("itcastlib").loadClass("cn.itcast.day2.ClassLoaderAttachment");
               
                //使用字节码创建对象,,
               
                //如果d1是ClassLoaderAttachment类型的话编译报错,,因为程序里面出现了ClassLoaderAttachment类名,
                //编译器检查这个类名时他就会使用加载器去加载他,但是那个类是加密后的类,编译器加载加载时加载了个乱码的文件,编译器就报错,,
                //就是写ClassLoaderAttachment的话编译器都过不了,
                //编译报错(运行ClassLoaderTest时加载ClassLoaderAttachment就报错,编译器说那个ClassLoaderAttachment类编译不了)
                //编译器编译时要加载那个ClassLoaderAttachment类
                //,所以得使用ClassLoaderAttachment的父类Date


                Date d1 =  (Date)clazz.newInstance();

                //ClassLoaderAttachment  是加密后
//                ClassLoaderAttachment d1=(ClassLoaderAttachment)clazz.newInstance();
                System.out.println(d1);



问题1:如果我写ClassLoaderAttachment d1=(ClassLoaderAttachment)clazz.newInstance();,那为什么会在运行时才会报错,,而不是编译时就报错,

我的理解:当你在程序里写ClassLoaderAttachment 时,虚拟机就把这个类加载到内存里了,他一加载加密后的类就肯定报错,为什么在编译时就不报错,而是运行时才报错,


问题2:我看视频发现老师第一次("cn.itcast.day2.ClassLoaderAttachment" )是没有写包名的,没加包名也没问题,,,后面老师才加了包名,我在实际写代码时一开始我就指定了包名,,
为什么老师开始时就不加包名呢

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
坐等各位大神解答
回复 使用道具 举报
高新后感觉太难,慢慢消化中。一用myeclipse英文版就不习惯
回复 使用道具 举报
王瑞 发表于 2013-4-14 15:48
高新后感觉太难,慢慢消化中。一用myeclipse英文版就不习惯

软件可以汉化的,论坛上分享资料帖上那个软件包里有汉化教程
回复 使用道具 举报
HM刘博 发表于 2013-4-14 16:32
软件可以汉化的,论坛上分享资料帖上那个软件包里有汉化教程

谢谢,我想问以后会不会都用英文版?慢慢就去适应还是直接用中文版比较好呢?
我就是觉着可能以后做开发都会用到英文版就没用去汉化
回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马