
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
类加载技术的学习与应用是每位Java编程开发程序员都需要掌握的一个编程技术点,下面我们就通过案例分析来简单了解一下,类加载的作用于应用场景分析。
类加载阶段
class文件本质上是对某个类的静态描述,他需要被加载到内存,转化成运行时数据,才能被虚拟机执行,这个加载到内存的过程就是类加载过程。
类加载完成之后,在方法区内存放了类的类型信息、常量、静态变量(jdk8之后随类对象存储在堆内)等信息,在堆中存放了与class文件对应的Class对象。通过Class对象,可以获取到类的字段、方法、构造器等信息,它是反射的基础。
类加载的作用
类加载在程序执行的过程中起到了承上启下的作用,将静态的二进制字节流数据转化为了运行时数据,供执行引擎去操作数据。
类加载的时机
虚拟机规范并没有严格规定什么时候开始类加载。但是,规定了6种必须对类进行初始化的情况,它们被称为主动引用。
由于初始化类对象需要在加载、验证、准备之后进行,因此这三步必然要在这之前完成。这里前4种是非常常见的,需要深刻掌握。
遇到new,getstatic,putstatic,invokestatic这四条字节码指令的时候,如果类型还没有被初始化,则需要初始化。
new:实例化对象(对象实例调用表达式所创建的对象)
getstatic/putstatic:读取/设置类的静态字段(被final修饰的静态常量除外)
invokestatic:调用类的静态方法
其他的初始化条件
unsafe方法进行调用对象操作
clone方法进行操作,进行申请
通过文件IO的ObjectInputStream/ObjectOutputStream进行处理构造
通过反射对类进行调用的时候,需要确保类已经被初始化过。也好理解,反射的核心是Class对象。
当前类被初始化时,要先确保其父类已被初始化。
虚拟机启动时,要执行的主类(包含main方法的那个类)要先被初始化。
接口中定义了默认方法(被default修饰,可以有方法体的方法,比较少见),当该接口的实现类初始化时,该接口需要先被初始化。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。