类加载器:ClassLoader与Class的区别
来源:互联网 发布:数据库约束有哪些 编辑:程序博客网 时间:2024/05/29 06:54
1、类加载器
java字节码(类)的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验、解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制。
JVM中用来完成上述功能的具体实现就是类加载器,类加载器读取.class
字节码文件将其转换成java.lang.Class
类的一个实例。每个实例表示一个java类。通过该实例的newInstance()方法可以创建出一个该类的对象。
2、Class.getResourceAsStream()
Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致。
例如你写了一个MyClass类在包com.qike.demo下,那么MyClass.class.getResourceAsStream(“name”) 会在com.qike.demo包下查找相应的资源。
如果这个name是以 ‘/’ 开头的,那么就会从classpath的根路径下开始查找。
ClassLoader.getResourceAsStream()
无论要查找的资源前面是否带’/’ClassLoader.getResourceAsStream()
都会从classpath的根路径下查找。
MyClass.getClassLoader().getResourceAsStream(“name”) 和 MyClass.getClassLoader().getResourceAsStream(“name”) 的效果是一样的。
3、类加载器的划分
有3种系统提供的类加载器:
启动类加载器(Bootstrap ClassLoader):
这个类加载器负责将\lib目录下的类库加载到虚拟机内存中,用来加载java的核心库,此类加载器并不继承于java.lang.ClassLoader,不能被java程序直接调用,代码是使用C++编写的.是虚拟机自身的一部分.
扩展类加载器(Extendsion ClassLoader):
这个类加载器负责加载\lib\ext目录下的类库,用来加载java的扩展库,开发者可以直接使用这个类加载器.
应用程序类加载器(Application ClassLoader):
这个类加载器负责加载用户类路径(CLASSPATH)下的类库,一般我们编写的java类都是由这个类加载器加载,这个类加载器是CLassLoader中的getSystemClassLoader()方法的返回值,所以也称为系统类加载器.一般情况下这就是系统默认的类加载器.
除此之外,我们还可以加入自己定义的类加载器,以满足特殊的需求,需要继承java.lang.ClassLoader类.
- 类加载器:ClassLoader与Class的区别
- 类的加载:Class.forName与ClassLoader.loadClass
- Class.forName()与ClassLoader.loadClass()的区别
- ClassLoader.loadClass()与Class.forName()的区别
- Class.forName与ClassLoader.loadClass的区别
- Class.forName()与ClassLoader.loadClass()的区别
- Class.forName与ClassLoader.loadClass的区别
- Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- Class.forName()与ClassLoader.loadClass的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
- Class.forName()与ClassLoader.loadClass()的区别
- Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
- ClassLoader与类的加载
- Class.forName与classLoader区别
- Class.forName()与ClassLoader.loadClass的区别(转)
- 微信开发之调试 2017-07-10 (含部分 chrome移动调试不能连接手机内容)
- mysql优化的20大方法
- 关于tomcat7下shutdown无法正常关闭服务的解决方案
- 自定义Bezier动画和抖动动画的实现
- 有效的编写SQL
- 类加载器:ClassLoader与Class的区别
- Java中增强for循环
- 选择排序(直接选择排序、堆排序)
- SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID
- 九度 1054
- C++动态规划之怪盗基德的滑翔翼(openjudge)
- 系统操作日志原型设计
- 数论——素数筛法
- kotlin for android 集成&&简单使用