
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
java编程开发语言的使用范围和使用人数都是非常多的,同时java编程开发也是许多人转行互联网行业都在学习的一个编程开发语言,下面我们就通过案例分析来了解一下,java编程类加载过程与加载器类型。
一、类加载过程
类加载子系统就是把字节码文件加载到JVM内存中。类加载器只负责class文件的加载,至于是否可以运行,就由执行引擎决定了加载的类的信息存放在方法区中
类加载的过程:
加载(loading):
通过一个类的权限定名(绝对路径),获取此类的二进制字节流
在内存中生成Class对象,作为这个类的访问入口
链接(linking):
验证(verify):
确保class文件的信息符合jvm的规范要求。
包括:文件格式验证,元数据验证,字节码验证,符号应用验证
准备(prepare):
为类变量(static修饰)分配内存,并设置默认初始值。比如int为0,double为0.00
但是final修饰static时就是常量,常量在编译期间就进行显式赋值并分配了(因为常量必须要求是显示赋值,所以压根不存在初始化)
解析(resolve):
将常量池内的符号引用转换为直接引用的过程。也有可能在初始化之后执行
初始化(initialization):
就是执行类的构造器方法<clinit>()的过程
该方法无需定义,是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块的语句合并而来的
构造器方法中指令按语句在源文件中出现的顺序执行
若该类有父类,先执行父类的<clinit>()再执行子类的
虚拟机必须保证一个类的<clinit>()方法在多线程下被同步加锁
使用
卸载
二、类加载器分类
引导类加载器(BootstrapClassLoader):
使用c/c++编写,用于加载java核心类库(如java_home/jre/lib/rt.jar)
只加载包名为:java,javax,sun开头的
自定义加载器:使用java编写,所有继承抽象类ClassLoader的加载器类都叫自定义加载类
扩展类加载器(ExtensionClassLoader)
加载jre/lib/ext下的类库,如果手动将自己的类放在该路径下,也会被加载
系统(应用)类加载器(AppClassLoader)
加载自己写的类。是默认的加载器
用户自定义加载器(UserDefinedClassLoader)
在日常的开发中,上述的三种加载器可以满足绝大部分要求。但是,比如一些框架,都会有自己的加载器。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。