首页编程java编程java中什么是类加载?什么是类的加载,何时加载

java中什么是类加载?什么是类的加载,何时加载

编程之家2023-10-1290次浏览

大家好,如果您还对java中什么是类加载不太了解,没有关系,今天就由本站为大家分享java中什么是类加载的知识,包括什么是类的加载,何时加载的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

java中什么是类加载?什么是类的加载,何时加载

Java中用import导入类和用Class方法加载类有什么区别

import仅仅包含导入操作,并不包含将字节码文件加载进内存这一动作,将字节码文件加载进内存是后续的实例化操作完成的。例如通过import导入了一堆包和类,但是后续什么都没用(没用实例化),那么导入的东西是不会被加载进内存的。而且import是编译期的,如果你在后续代码中没有使用到你导入的内容,那么import语句甚至不会编译和执行。查看字节码文件可以看出,import的作用就是对你程序中要用到(实例)的东西进行署名(signature),当程序运行的时候好知道你实例化的对象的类的字节码文件去哪里找。

而Class.forName方法包含的动作是:根据给出的全类名(方法的参数)找到对应的字节码文件,并将字节码文件通过ClassLoader加载进内存中生成Class类对象(方法的返回值就是Class类对象)。

这些就是二者的区别了。

java中什么是类加载?什么是类的加载,何时加载

java类的加载过程是怎么样的

类加载到jvm需要经历如下几个过程:

一.加载

通过类的全限定名转换为二进制字节流,在jvm堆中生成代表这个Class的对象,作为方法区域的方法入口.

java中什么是类加载?什么是类的加载,何时加载

二.连接

1.验证:验证class的字节流是否对jvm虚拟机造成伤害,是否符合jvm的规范,这里包含几个验证.

2.准备:为类的static变量赋初始值,其中不包含类其它实例成员的初始化.

3.解析:将常量池内的符号引用替换成直接引用

三.初始化

这里是static{}块,构造函数,代码块{}的执行过程.

四.使用

对象的属性,方法等调用操作.

五.销毁

jvm通过确定对象没有引用后进行gc操作.

什么是类的加载,何时加载

当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载,连接,初始化三个步骤来对该类进行初始化,JVM将会连续完成这三个步骤,也把这三个步骤统称为类加载或类初始化。

类加载指的是将类Class文件读入内存,并为之创建一个java.lang.Class对象,也就是说程序使用任何类时,系统都会为之建立一个java.lang.Class对象

类是某一类对象的抽象,类是概念层次的东西,但类也是一种对象,每个类是一批具有相同特征的对象的抽象,而系统中所有类,它们实际上也是对象,都是java.lang.Class的实例

类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器,开发者也可以通过继承ClassLoader基类来创建自己的类加载器

通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来源:1.从本地文件系统来加载Class文件,这是大部分实例程序的类加载方式

2从jar包中加载class文件,如JDBC编程时用到的数据库驱动类就是放在jar文件中,JVM可以从jar文件中直接加载该Class文件

3.通过网络加载class文件

4.把一个java源文件动态编译,并执行加载。

Java类加载机制

每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载。Java的类加载机制是技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机的连接模型和java语言的动态性都有很大帮助。电脑培训就得好好的为大家介绍一下。

那么什么是类的加载?

类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。

Java类加载机制

类加载器是Java语言的一个创新,也是Java语言流行的重要原因之一。它使得Java类可以被动态加载到Java虚拟机中并执行。类加载器从JDK1.0就出现了,最初是为了满足JavaApplet的需要而开发出来的。JavaApplet需要从远程下载Java类文件到浏览器中并执行。现在类加载器在Web容器和OSGi中得到了广泛的使用,而类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误(LinkageError错误)如果这个类一直没有被程序主动使用,那么类加载器就不会报告错误。

类的生命周期

类加载的过程中包括有加载,验证,准备,解析,初始化五个阶段。而需要注意的是在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段。

好了,文章到此结束,希望可以帮助到大家。

有些什么好玩的java游戏,好玩的JAVA游戏有哪些java的服务和接口区别是什么(java中dao层和service层的区别是什么)