课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在上文中给大家简单介绍了Java编程开发类加载的步骤等内容,其中我们就说到了验证的问题,而今天我们就一起来了解一下,Java类加载验证都有哪些常见类型。
1、文件格式验证
文件格式的验证就是检查字节流是否符合Class文件格式的规范,文件格式通常检查一下几个要素:
魔数,是否以0xCAFEBABE开头
主次版本号是否在合适的范围
常量池中的常量是否有不被支持的常量类型
指向常量的各种索引值是否有指向不存在的常量或者不符合类型的常量
...........
2、元数据验证
元数据的验证是对字节码描述的信息进行语义分析,验证的要素主要包含以下几点:
是否有父类,除了Object外,都有父类
这个类的父类是否继承被final修饰的类
若这个类不是抽象类,是否实现了父类中的所有方法
...........
3、字节码验证
字节码验证是整个验证过程中的复杂的一个阶段,它主要通过数据流和控制流分析,确定程序语义是合法的、符合逻辑的。在二阶段对元数据信息中的数据类型做完校验后,这个阶段将对类的方法体进行校验分析,保证被校验类的方法在运行时不会做出危害虚拟机安全的事件,例如:
保证任意时刻操作数栈的数据类型与指令代码序列都能配合工作,例如不会出现类似这样的情况:在操作栈放置了一个int类型的数据,使用时却按long类型来加载入本地变量表中。
保证跳转指令不会跳转到方法体以外的字节码指令上。
保证方法体中的类型转换是有效地,例如可以把一个子类对象赋值给父类数据类型,这是安全的,但是把父类对象复制给子类数据类型,甚至把对象赋值给与他毫无继承关系、完全不相干的一个数据类型,则是危险和不合法的。
.........
4、符号引用验证
符号引用验证可以看做是对类自身(常量池中的各种符号引用)的信息进行匹配性校验,它的目的是确保解析动作能够正常执行,如果无法通过符号的引用验证,则会抛出异常。符号引用验证阶段通常需要校验以下内容:
符号引用中通过字符串描述的全限定名是否能找到对应的类。
在制定类中是否存在符合方法的字段描述符以及简单名称所描述的方法和字段。
符号引用中的类、字段、方法的访问性(private、protected、public、default)是否可被当前类访问。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。