---------------------- android培训、java培训、期待与您交流! ----------------------
今天总结了了一下视频中关于类加载器的知识点。以及视频中的应用。
多种方式实现同一个功能:加载配置文件。,
常见的非反射加载方式的语句:
1,当config.properties位于classpath下时InputStream ips = new FileInputStream("config.properties")
2, 当config.properties位于classpath下的某个包中时,需用 InputStream ips = new FileInputStream("包名/config.properties")
用类加载器实现1语句: 3.1 main所在的类名.class. getClassLoader.getResourseAsStream ("config.properties")
用类加载器实现2语句: 3.2 main所在的类名.class. getClassLoader.getResourseAsStream ("包名/config.properties")
还有另一个反射方法可用: 4,main所在的类名.class.getResourseAsStream ("/包名/config.properties")//配置文件与main所在的class无关系
当配置文件于main所在的class位于同一个目录中时,4句可以简化为 main所在的类名.class.getResourseAsStream ("config.properties")
类加载器的总结:
java.lang.ClassLoader
类
java.lang.ClassLoader
类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个 Java 类,即java.lang.Class
类的一个实例。除此之外,ClassLoader
还负责加载 Java 应用所需的资源,如图像文件和配置文件等。为了完成加载类的这个职责,ClassLoader
提供了一系列的方法,比较重要的方法如下所示。
getParent()
返回该类加载器的父类加载器。
loadClass(String name)
加载名称为 name
的类,返回的结果是 java.lang.Class
类的实例。
findClass(String name)
查找名称为 name
的类,返回的结果是 java.lang.Class
类的实例。
findLoadedClass(String name)
查找名称为 name
的已经被加载过的类,返回的结果是java.lang.Class
类的实例。
defineClass(String name, byte[] b, int off, int len)
把字节数组 b
中的内容转换成 Java 类,返回的结果是 java.lang.Class
类的实例。这个方法被声明为 final
的。
resolveClass(Class<?> c)
链接指定的 Java 类。
1 ,引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader
。
2,扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
3,系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过ClassLoader.getSystemClassLoader()
来获取它。
除了系统提供的类加载器以外,开发人员可以通过继承 java.lang.ClassLoader
类的方式实现自己的类加载器。
可以写自己的类加载器来在new实例之前对class文件进行加密和解密。
视频中Java基础加强_类加载器的一个高级问题的实验分析的答案可以用一句话总结,父类应位于子类加载器的加载位置或位于子类加载器的父加载器的加载位置中。(被加载的类应该位于合适的与位置。)
---------------------- android培训、 java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima