background image

JAVA 教程:Java 程序类加载及其反射机制

当调用 java 命令运行某个 Java 程序时,该命令将启动一条 Java 虚拟机进程,同一个

JVM 的所有线程,所有变量都处于同一进程里,它们都是用该 JVM 进程的内存区。

程序运行到最后正常结束。
程序运行到使用 System.exit()或 Runtime().exit()代码结束程序。
程序执行过程中遇到未捕获的异常或错误而结束。
程序所在平台强制结束了 JVM 进程。
  类的加载
  类加载指的是将类的 class 文件读入内存,并为之创建一个 java.lang.Class 对象,而

系统中所有的类,它们实际上也是对象,称为类对象,它们都是 java.lang.Class 的实例,虚拟机
为每种类型管理一个独一无二的 Class 对象,也就是说,每个类(型)都有一个 Class 对象。

  类的连接
  连接阶段将会负责将类的二进制数据合并到 JRE 中
验证
准备:类准备阶段则负责将类的静态属性分配内存,并设置默认初始值
解析
  类的初始化
  在类的初始化阶段,虚拟机负责对类进行初始化,主要就是对静态属性进行初始化,

在 Java 类中对静态属性指定初始值有两种方式: (1)声明静态属性时指定初始值;(2)使用静
态初始化块为静态属性制定初始值

  当 Java 程序首次通过下面 6 种方式来使用某个类或接口时,系统就会初始化该

类或接口。

  a) 创建类的实例。
  b) 调用某个类的静态方法。
  c) 访问某个类或接口的静态属性,或为该静态属性赋值。
  d) 使用反射方式来强制创建某个类或接口对应的 java.lang.Class 对象。
  e) 初始化某个类的子类,当初始化某个类的子类时,该子类的所有父类都会被初始

化。

  f) 直接使用 java.exe 命令来运行某个主类时,程序会先初始化该主类。
  类加载器
  类加载器负责将.class 文件加载到内存中,并为之生成对应的 java.lang.Class 对象。
  在 Java 中,一个类用其全限定类名(包括包名和类名)作为标识。
  在 JVM 中,一个类用其全限定类名和其类加载器作为其唯一标识。
  当 JVM 启动时,会形成由三个类加载器组成的:
Bootstrap ClassLoader:

 

根类加载器 它不是 java.lang.ClassLoader 的子类,而是由 JVM 自

身实现 rt.jar。

Extension ClassLoader:

 

扩展类加载器 它负责加载 JRE 的扩展目录 ext 中 JAR 的类包。

System ClassLoader:

 

系统类加载器 它负责在 JVM 启动时,加载来自命令 java 中的-