java 类加载

一、类加载器分类

java的类加载器有三种:启动类加载器(bootstrap class loader)、扩展类加载器(extension class loader)、应用类加载器(application class loader)。

启动类加载器:c++实现的,没有对应的java对象。加载最基础最重要的类,比如JRE的lib目录下的jar包类

扩展类加载器:java.lang.ClassLoader的子类。加载次要的类,比如lib/ext目录下的jar包类

应用类加载器:java.lang.ClassLoader的子类。加载应用程序路径下的类,一般我们自己写的类就是应用类加载器加载的。

类加载后会生成一个Class类的实例,这个实例不是类对象实例,不要搞混淆,大概过程可参看如下流程图:

二、类加载的方法

1、Class.forName(String className)

调用该方法加载指定类,会执行类的静态代码

2、类名.class

这种方法加载指定类,不会执行静态方法

3、ClassLoader.loadClass(String name)

这种方法加载指定类,不会执行静态方法

三、类加载的过程

1、加载

查找字节流,据此来创建类的过程。对于数组类来说,没有对应的字节流,由java虚拟机直接生成,其他类则由类加载器完成加载。

2、链接

链接由验证、准备、解析三个过程。

3、初始化

直接赋值的静态字段被final修饰,且类型是基本类型或字符串的时候,会被编译器标记为常量值。

其他的直接赋值操作,以及静态代码块中的代码,都被置于同一个方法中,并命名为<clinit>

初始化就是为标记为常量值的字段赋值,以及执行<clinit>方法的过程。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容