黑马程序员技术交流社区

标题: 高新视频47疑问 [打印本页]

作者: 聂斌    时间: 2013-4-7 18:13
标题: 高新视频47疑问


                //使用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" )是没有写包名的,没加包名也没问题,,,后面老师才加了包名,我在实际写代码时一开始我就指定了包名,,
为什么老师开始时就不加包名呢

作者: 聂斌    时间: 2013-4-7 18:13
坐等各位大神解答
作者: 王瑞    时间: 2013-4-14 15:48
高新后感觉太难,慢慢消化中。一用myeclipse英文版就不习惯
作者: HM刘博    时间: 2013-4-14 16:32
王瑞 发表于 2013-4-14 15:48
高新后感觉太难,慢慢消化中。一用myeclipse英文版就不习惯

软件可以汉化的,论坛上分享资料帖上那个软件包里有汉化教程
作者: 王瑞    时间: 2013-4-15 07:53
HM刘博 发表于 2013-4-14 16:32
软件可以汉化的,论坛上分享资料帖上那个软件包里有汉化教程

谢谢,我想问以后会不会都用英文版?慢慢就去适应还是直接用中文版比较好呢?
我就是觉着可能以后做开发都会用到英文版就没用去汉化
作者: 黄玉昆    时间: 2013-4-17 08:36
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




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