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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© The_Wizard 中级黑马   /  2013-12-8 09:08  /  2684 人查看  /  13 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

有没有看视频看了3、4遍,但还是感觉很多不是太好,但看的有点反感的感觉有木有?最近在看JS,本来java都不想提了。不过还是有一个算是难点,自己有总结,且有缺陷的地方。
/*
                 * 45-48:自定义类加载器的原理、应用:文件加密的工具类、解密类加载器。
                 */
//!                System.out.println(new ClassLoaderAttachment().toString());
                System.out.println("xxx2");
//                Class clazz = new MyClassLoader("itcastlib").loadClass("cn.itcast.day2.ClassLoaderAttachment");
                //这种ClassLoaderAttachment将父加载器加载。。
                //如果将加密的字节码替换掉未加密的字节码,父加载器会加载这个加密的字节码。
                //除非没有cn.itcast.day2.ClassLoaderAttachment的字节码(父加载器就找这个字节码),才会是指定加载器加载。
                //在存在该类字节码的情况下,可以这样让指定加载器加载。
                Class clazz = new MyClassLoader("itcastlib").loadClass("ClassLoaderAttachment");
                //如果将ClassLoaderAttachment未加密的字节码删除掉。由于eclipse的自动编译功能,所以别再点保存了。
                //该类不能被很好加载,所以创建的对象可以转换成父类类型。
//!                ClassLoaderAttachment d =  (ClassLoaderAttachment)clazz.newInstance();               
                Date d1 =  (Date)clazz.newInstance();
                System.out.println(d1);

这是java基础加强的45-48段视频中ClassLoderTest.java的最后一段代码和我的注释。希望对大家有点帮助。
写一个输入流,它是用来读取一个文件数据的。相关代码的写法很多,关键是表示文件的字符串还有多种变化。头晕:
//注意以下文件字符串的格式
//InputStream ips = new FileInputStream("bin\\cn\\itcast\\day1\\resources\\config.properties");
//File f = new File("bin\\cn\\itcast\\day1\\resources\\config.properties");InputStream ips = new FileInputStream(f);
//InputStream ips = ReflectTest2.class.getClassLoader().getResourceAsStream("cn/itcast/day1/resources/config.properties");
//InputStream ips = ReflectTest2.class.getResourceAsStream("resources/config.properties");
InputStream ips = ReflectTest2.class.getResourceAsStream("/cn/itcast/day1/resources/config.properties");

有没有哪位同学总结过各种情况表示文件字符串的不同写法。除了上面5中还有哪些不同写法?

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 赞一个!

查看全部评分

13 个回复

倒序浏览
呵呵,楼主总结的不错。你上面总结的一些在张老师的视频中讲到过的,其原理都是用类加载器去加载指定资源文件,返回一个关联该文件的读取流对象。至于写法的话,应该就这么多了,因为用类加载器去加载首先会返回这个类加载器加载指定类文件下面的那个类文件路径,然后再跟你要加载的文件(该文件在当前目录下或当前目录的子目录中)拼接起来就成了一个完整的资源文件路径了,由于你的文件相对于类文件目录会有一些不同,因此会有多种写法。
这是我在这一节中的注释,请多指教。
public class ClassLoaderTest {
        public static void main(String[] args) throws Exception {
                /*
                 * MyClassLoader是一个自定义类加载器,覆盖了findClass方法,会走父类中定义好的流程,指定加载itcastlib目录下的类,当调用loadClass方法后,
                 * 会先到父类下去查找指定的类文件(这可能是由于继承的关系,子类构造函数中都含有父类super引用,子类创建对象会先执行super(),),没找到后
                 * 调用findClass方法,由于自定义类加载器覆盖了findClass方法,因此会调用子类中的findClass方法,而子类中的findClass方法中在通过defineClass把指定的类文件
                 * 转成字节码文件对象。
                */
                Class clazz = new MyClassLoader("itcastlib").loadClass("cn.itcast.calssLoader.ClassLoaderAttachment");       
                Date d1 =  (Date)clazz.newInstance();//通过自定义类加载器加载后的字节码文件创建对象实例
               
                System.out.println(d1);
        }
}

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
{:soso_e179:}
回复 使用道具 举报
赞{:soso_e179:}
回复 使用道具 举报
好厉害哦。
回复 使用道具 举报
一个人品不完善的人是不可能成为一个真正有所作为的人的。
回复 使用道具 举报

回帖奖励 +1

顶!!{:soso_e179:}
回复 使用道具 举报
1007886543 来自手机 中级黑马 2014-4-27 22:13:03
8#
我刚开始,还有很多不懂呀
回复 使用道具 举报
有点懂了,但是还是不是很懂
回复 使用道具 举报
quan23355 发表于 2013-12-8 12:24
呵呵,楼主总结的不错。你上面总结的一些在张老师的视频中讲到过的,其原理都是用类加载器去加载指定资源文 ...

看见你说的,开始有点懂了,但还是不是很懂,关键是思路太乱了,视频里讲的没有思绪,不懂的时候就感觉很难,关键是如何理解呢
回复 使用道具 举报
cuixinfu 来自手机 中级黑马 2014-7-29 08:33:38
11#
很不错  赞
回复 使用道具 举报
还没学习到
回复 使用道具 举报
有必要边听边自己打代码吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马