Java 基础知识整理 (待整理)

JVM之类加载器(ClassLoader)基本介绍类加载器用于将class文件加载到JVM中去执行。下面介绍类加载器涉及到的基本概念和加载基本过程。一、Java虚拟机与程序的生命周期 在运行Java程序时,会启动JVM进程,该进程中会使用一个线程去执行我们的Java程序。在如下几种情况下,Java虚拟机将结束生命周期: 1.执行了Syste...
摘要由CSDN通过智能技术生成

JVM之类加载器(ClassLoader)基本介绍

 

 类加载器用于将class文件加载到JVM中去执行。下面介绍类加载器涉及到的基本概念和加载基本过程。

 

一、Java虚拟机与程序的生命周期

        在运行Java程序时,会启动JVM进程,该进程中会使用一个线程去执行我们的Java程序。在如下几种情况下,Java虚拟机将结束生命周期:

        1.执行了System.exit(0)(内部调用了Runtime.getRuntime().exit(n)),如果是非0参数表示异常退出。

        2.程序正常结束

        3.程序在执行过程中遇到了异常或错误而导致异常终止。如果异常没有try-catch而一直throw,那么一直throw到main方法,

              main方法还不处理的化那就会throw给JVM,JVM看到异常就会结束运行。

        4.由于操作系统错误而导致的Java虚拟机进程终止

 

二、类的加载、连接与初始化

        加载:查找并加载类的二进制数据到JVM

        连接:分为三个步骤

                Ø  验证:确保被加载类的正确性

                Ø  准备:为类的静态变量分配内存,并将其初始化为默认值

                Ø  解析:把类中的符号引用转换为直接引用

        初始化:为类的静态变量赋予正确的初始值。(就是在类中定义变量时赋予的默认值)

        

        以上的过程中并不会初始化对象变量,因为此时并不存在任何对象,只是将类的class文件数据加载到内存中,对象的生成是在该过程完成之后。

 

        类中的静态代码块是按照声明的顺序执行的,例如:

        static int  a;

        static {

               a=1;

        }

        static{

               a=2;

        }

        此时a的最终值是2,如果两个代码块颠倒顺序,那么a的最终值就是1。

 

三、类的主动使用与被动使用

        Java程序中对类的使用可以分为两种:主动使用 和 被动使用。

        1Java程序对类的主动使用的情况

        > 创建类的实例

        > 访问某个类或接口的静态变量,或者对该静态变量赋值

        > 调用类的静态方法

        > 通过反射访问类,例如Class.forName(“package.ClassName”)

        > 初始化一个类的子类,或访问子类的静态变量或静态方法也是对父类的主动使用。

        > Java虚拟机启动时被标注为启动类的类,例如JUnit中的TestCase类。

 

        所有的Java虚拟机实现必须在每个类或接口被Java程序首次主动使用时才初始化它们。因此Java虚拟机只有在一个类第一次

发生上面的六种情况时才会初始化该类,仅第一次主动使用时初始化。

        除了以上的主动使用的情况,其它的情况都是对类的被动使用,因此都不会导致类的初始化。

类的加载、连接与初始化过程的详细分析(上)

一、类加载阶段

        1.类加载方式

        类的加载指的是将类的.class文件的二进制数据读入内存中,将其放在运行时数据区的方法区内。然后在堆区创建一个Java.lang.Class对象,

用来封装类在方法区内的数据结构,该对象是由JVM在加载类时创建的。所以每个类都会对应一个Class类型的对象,通过getClass()来获取,

并且无论生成该类的多个少对象,其Class类型的对象只有一个。Class类的构造方法是私有的,并且Class类的对象只有JVM才能创建,创建时机为加载.class文件时。

        因此Class类是整个反射的入口&

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值