java之类加载

讲反射之前我们先讲下JVM和类:

在代码编译后,就会生成JVM(JAVA虚拟机)能够识别的二进制字节流文件(*.class)。而JVM把Class文件中的数据从文件加载到内存,并对数据进行校验,转换解析,初始化,使这些数据最终成为可以被JVM直接使用的JAVA类型,这过程就是JVM的类加载机制。

Java的执行过程就是JVM从启动到退出的过程。当调用java命令来运行某个java程序时,该命令将会启动一个JVM进程。同一个JVM中的所有线程,变量都处于同一个进程中,共享该JVM的内存区域。

当出现以下情况时,JVM会退出:

1. 程序正常执行结束。

2. 使用System.exit(0)方法。

3. 出现异常时,没有捕获异常。

4. 平台强制结束JVM进程。

JVM进程一旦结束,该进程中内存中的数据将会丢失。


当程序主动使用到某个类时,如果该类还未被加载进内存中,则系统会通过加载,连接,初始化三个步骤来对该类进行初始化



注:Class是什么呢?

这里C大写了,与类概念区分开,在java里,Class是一个实实在在的类,在包java.lang下,有这样一个Class.java文件,它跟我们自己定义的类一样,而Class对象就是这个Class类的实例。Class类是一个用来表示类的类。可以为它创建实例,也就是本文后面提到的Class对象,也叫作Class实例。

(1)类的加载

类加载时指将类的class文件(字节码文件)载入内存中,并为之创建一个java.lang.Class对象,我们称之为字节码对象。

类的加载过程由类加载器(Classloader)完成,类加载器通常由JVM提供,我们称之为系统类加载器,我们也可以继承Classloader类来提供自定义的类加载器。

不同的类加载器可以实现加载本地字节码文件,jar包中的字节码,通过网络加载字节码等。

(2)类的连接

当类被加载进内存之后,系统为之产生一个对应的Class对象,接着把类的二进制数据合并到jre中。

1)验证:检验被加载的类是否有正确的内部结构

2)准备:负责为类的static变量分配内存,并设置默认值

3)解析:把类的二进制数据中的符号引用替换为直接饮用(深入分析JVM)

(3)类的初始化

在此阶段,JVM负责对类进行初始化,主要就是对static变量进行初始化

1)如果该类还未被加载和连接,则程序先加载并连接该类

2)如果该类的直接父类还未被初始化,则先初始化其父类

3)如果类中有初始化语句(静态代码块),则系统依次执行这些初始化语句

例:

class Demo{

        static int age;

        static int num = 10;

        static{

                age = 0;

        }

}


从上文中我们得知我们是使用Class类来描述类这种对象。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java的类机制是指将类的字节码文件到内存中,并在运行时将其转换为可执行的代码的过程。Java的类机制遵循了一定的规则和顺序,可以分为以下几个步骤: 1. :类的第一步是,即将类的字节码文件到内存中。Java的类器负责从文件系统、网络或其他来源类的字节码文件。过程中会进行词法和语法的验证,确保字节码文件的正确性。 2. 链接:类的第二步是链接,即将已经的类与其他类或者符号进行关联。链接分为三个阶段: - 验证:验证阶段确保类的字节码文件符合Java虚拟机规范,包括检查文件格式、语义验证等。 - 准备:准备阶段为静态变量分配内存空间,并设置默认初始值。 - 解析:解析阶段将符号引用转换为直接引用,例如将类或者方法的符号引用解析为对应的内存地址。 3. 初始化:初始化是类的最后一步,在此步骤中会执行类的初始化代码,对静态变量进行赋值和执行静态代码块。类的初始化是在首次使用该类时触发的,或者通过反射方式调用`Class.forName()`方法来强制初始化。 Java的类机制是动态的,可以根据需要和卸类,它还支持类的继承、接口实现、内部类等特性。类机制是Java语言的重要特性之一,它为Java提供了强大的动态性和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值