java class加载

1. JVM加载class文件的两种方法;

  • 隐式加载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。
  • 显式加载, 通过class.forname()、this.getClass.getClassLoader().loadClass()等方法显式加载需要的类,或者我们自己实现的 ClassLoader 的 findlass() 方法。

    下面介绍下 class.forName的加载类方法:

    Class.forName是一个静态方法,同样可以用来加载类。该方法有两种形式:Class.forName(String name,boolean initialize, ClassLoader loader)和Class.forName(String className)。第一种形式的参数 name表示的是类的全名;initialize表示是否初始化类;loader表示加载时使用的类加载器。第二种形式则相当于设置了参数 initialize的值为 true,loader的值为当前类的类加载器。Class.forName的一个很常见的用法是在加载数据库驱动的时候。如
    Class.forName("org.apache.derby.jdbc.EmbeddedDriver")用来加载 Apache Derby 数据库的驱动。

2.类加载的动态性体现:

一个应用程序总是由n多个类组成,Java程序启动时,并不是一次把所有的类全部加载后再运行,它总是先把保证程序运行的基础类一次性加载到jvm中,其它类等到jvm用到的时候再加载,这样的好处是节省了内存的开销,因为java最早就是为嵌入式系统而设计的,内存宝贵,这是一种可以理解的机制,而用到时再加载这也是java动态性的一种体现。

3、如何加载 class 文件

java class加载_第1张图片

  • 第一阶段找到 .class 文件并把这个文件包含的字节码加载到内存中。
  • 第二阶段中分三步,字节码验证;class 类数据结构分析及相应的内存分配;最后的符号表的链接。
  • 第三阶段是类中静态属性和初始化赋值,以及静态块的执行等。



你可能感兴趣的:(java笔记)