Java 类加载过程 详解

java基础(jdk1.8)

**

类加载过程

**

类加载就是Java程序执行时,主函数执行前的一系列操作,或者执行到某处时的操作

      在深入理解Java虚拟机一书中对java文件编译后形成的class文件进行了一系列解释,有兴趣可以看看。

类的加载

如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。

  • 加载:
    就是指将class文件读入内存(方法区),并为之创建一个Class对象(堆)。
    任何类被使用时系统都会建立一个Class对象

  • 连接:
    验证 是否有正确的内部结构,并和其他类协调一致
    准备 负责为类的静态成员分配内存,并设置默认初始化值
    解析 将类的二进制数据中的符号引用替换为直接引用

  • 初始化:
    就是初始化步骤

类初始化时机:
  1. 创建类的实例

  2. 类的静态变量,或者为静态变量赋值

  3. 类的静态方法

  4. 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象

  5. 初始化某个类的子类

  6. 直接使用java.exe命令来运行某个主类

    //也就是说,这么几个情况的时候,类就会被类加载器进行加载

类加载器:
  • Bootstrap ClassLoader 根类加载器
    也被称为引导类加载器,负责Java核心类的加载
    比如System,String等。在JDK中JRE的lib目录下rt.jar文件中

  • Extension ClassLoader 扩展类加载器
    负责JRE的扩展目录中jar包的加载。
    在JDK中JRE的lib目录下ext目录

  • System ClassLoader 系统类加载器
    负责在JVM启动时加载来自java命令的class文件,以及classpath环境变量所指定的jar包和类路径。

最后:我们对父子类的几个区块执行的顺序来看一下。(常考)


class A {

    public int i =method();

    public static int j=method2();

    public int k=0;

    public A(){

        System.out.println(1);

    }
    public int method(){

        System.out.println(2);

        return 2;

    }
    public static int method2(){

        System.out.println(3);

        return 3;
    }
}

class B extends A{

    public int m = method3();

    public static int n =method4();

    public int t =0;

    public B(){

        System.out.println(4);

    }

    public int method3(){

        System.out.println(5);

        return 5;
    }

    public static int method4(){

        System.out.println(6);

        return 6;
    }

    public static void main(String[]arg){

        System.out.println(7);

        A a =new B();
    }
}

答案:
3
6
7
2
1
5
4

结论:

初始化顺序:

父类的静态方法——》子类的静态方法——》父类的实例方法——》子类的实例方法


有兴趣的关注我的公众号,一起学习交流啊
在这里插入图片描述

上一篇 》垃圾回收


下一篇 》Java反射

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值