黑马程序员技术交流社区
标题:
学习java自学课程的一个总结与问题。
[打印本页]
作者:
The_Wizard
时间:
2013-12-8 09:08
标题:
学习java自学课程的一个总结与问题。
有没有看视频看了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中还有哪些不同写法?
作者:
quan23355
时间:
2013-12-8 12:24
呵呵,楼主总结的不错。你上面总结的一些在张老师的视频中讲到过的,其原理都是用类加载器去加载指定资源文件,返回一个关联该文件的读取流对象。至于写法的话,应该就这么多了,因为用类加载器去加载首先会返回这个类加载器加载指定类文件下面的那个类文件路径,然后再跟你要加载的文件(该文件在当前目录下或当前目录的子目录中)拼接起来就成了一个完整的资源文件路径了,由于你的文件相对于类文件目录会有一些不同,因此会有多种写法。
这是我在这一节中的注释,请多指教。
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);
}
}
作者:
神之梦
时间:
2013-12-8 21:39
{:soso_e179:}
作者:
ζ丶凡σ
时间:
2013-12-9 08:55
赞{:soso_e179:}
作者:
官珺伟
时间:
2014-1-1 17:19
好厉害哦。
作者:
闭眼就天黑
时间:
2014-1-16 18:41
一个人品不完善的人是不可能成为一个真正有所作为的人的。
作者:
筱厸厸
时间:
2014-1-24 15:15
顶!!{:soso_e179:}
作者:
1007886543
时间:
2014-4-27 22:13
我刚开始,还有很多不懂呀
作者:
姜姗姗
时间:
2014-5-16 23:50
有点懂了,但是还是不是很懂
作者:
姜姗姗
时间:
2014-5-16 23:52
quan23355 发表于 2013-12-8 12:24
呵呵,楼主总结的不错。你上面总结的一些在张老师的视频中讲到过的,其原理都是用类加载器去加载指定资源文 ...
看见你说的,开始有点懂了,但还是不是很懂,关键是思路太乱了,视频里讲的没有思绪,不懂的时候就感觉很难,关键是如何理解呢
作者:
cuixinfu
时间:
2014-7-29 08:33
很不错 赞
作者:
Ken未来
时间:
2014-8-2 21:58
还没学习到
作者:
阴有风
时间:
2014-9-28 08:17
有必要边听边自己打代码吗?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2