美文网首页
类初始化和加载过程

类初始化和加载过程

作者: ihujian | 来源:发表于2018-07-16 18:15 被阅读0次

一、对象的初始化顺序:

java类加载器加载类的顺序:http://blog.csdn.net/crazycoder2010/article/details/6288732

(1)加载父类(以下序号相同,表明初始化是按代码从上到下的顺序来的)

  1.为父类的静态属性分配空间并赋于初值

  1.执行父类静态初始化块;

(2)加载子类

  2.为子类的静态属性分配空间并赋于初值

  2.执行子类的静态的内容;

(3)加载父类构造器

  3. 初始化父类的非静态属性并赋于初值

  3.执行父类的非静态代码块;

  4.执行父类的构造方法;

(4)加载子类构造器

  5.初始化子类的非静态属性并赋于初值

  5.执行子类的非静态代码块;

  6.执行子类的构造方法.

总之一句话,静态代码块内容先执行(父先后子),接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。

二、静态变量和静态代码块的初始化顺序:

谁在前面先初始化谁(这个也比较容易理解,初始化的时候,不可能跳着去初始化吧,比如说静态代码块在静态变量的前面, 不可能先跳过静态代码块的初始化先去执行静态变量的初始化吧。)

注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。

三、类装载步骤

在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:

  1. 装载:查找和导入类或接口的二进制数据;

  2. 链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;

  3. 校验:检查导入类或接口的二进制数据的正确性;

  4. 准备:给类的静态变量分配并初始化存储空间;

  5. 解析:将符号引用转成直接引用;

  6. 初始化:激活类的静态变量的初始化Java代码和静态Java代码块。

  7. 初始化类中属性是静态代码块的常用用途,但只能使用一次。

对象的初始化顺序测试代码

public class Parent {

static String name ="hello";
    {
    System.out.println("parent block");
    }
    static {
    System.out.println("parent static block");
    }

    public Parent() {
    System.out.println("parent constructor");
    }
    }

class Child extends Parent {
    static String childName ="hello";
    {
    System.out.println("child block");
    }
    static {
    System.out.println("child static block");
    }

    public Child() {
    System.out.println("child constructor");
    }
    }

    public class StaticIniBlockOrderTest {

    publicstaticvoid main(String[] args) {
    new Child();// 语句(*)
    }
}

静态变量和静态代码块的初始化顺序测试代码
public class TestOrder {
//静态变量
public static TestA a =new TestA();

//静态初始化块
static {
System.out.println("静态初始化块");
}

//静态变量
publicstatic TestB b =new TestB();

publicstaticvoid main(String[] args) {
new TestOrder();
}
}

class TestA {
public TestA() {
System.out.println("Test--A");
}
}

class TestB {
public TestB() {
System.out.println("Test--B");
}
}


运行结果:
  Test--A 
   静态初始化块 
   Test--B

相关文章

  • 第五课、类的加载连接与初始化过程详解

    类的加载、连接与初始化过程详解 类的加载、连接与初始化 1、过程:加载-->连接(验证-->准备-->解析) --...

  • 类加载连接初始化阶段

    一、类的生命周期和加载阶段概述 类的生命周期 类的加载连接初始化过程 二、类的加载连接初始化详细过程  加载 使用...

  • 类加载

    一、类加载器 二、类加载过程 加载 连接 验证 准备 解析 初始化

  • Java类加载机制

    一、加载过程 固定的顺序:加载、【验证、准备、解析】、初始化和卸载; 加载:类加载过程的一个阶段:通过一个类的完全...

  • 反射

    类加载器:加载过程 加载,连接,初始化 分类: Bootstrap ClassLoader 根类加载器:核心类的加...

  • 类加载过程

    类的加载过程分为:加载、链接和初始化三个过程 加载过程就是查找该类的字节流并通过字节流来创建类的过程,这个过程需要...

  • Java类加载过程

    一、类加载过程 类的生命周期如下所示 类加载过程包括加载、验证、准备、解析和初始化五个部分,其中验证、准备和解析统...

  • 面经题目学习

    java类加载过程类加载过程:加载、验证、准备、解析、初始化。类加载过程中主要是将Class文件(类的二进制字节流...

  • JVM类加载过程与双亲委派模型

    类加载过程 类加载过程为JVM将类描述数据从.class文件中加载到内存,并对数据进行解析和初始化,最终形成被JV...

  • 类加载机制

    类加载的过程 类加载的全过程,加载,验证,准备,解析和初始化这五个阶段。 加载 在加载阶段,虚拟机需要完成以下三件...

网友评论

      本文标题:类初始化和加载过程

      本文链接:https://www.haomeiwen.com/subject/ksrysxtx.html