java类加载和对象初始化

Posted apple_pie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java类加载和对象初始化相关的知识,希望对你有一定的参考价值。

对象初始化过程: 
1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 
2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 
3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;
4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法; 

 

Java类加载机制

1.概述

  Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。

      虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。

2.工作机制

      类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件。在Java中,类装载器把一个类装入JVM中,要经过以下步骤:

   (1) 装载(加载):查找和导入Class文件;

     (2) 链接:把类的二进制数据合并到JRE中;

        (a)校验:检查载入Class文件数据的正确性;

        (b)准备:给类的静态变量分配存储空间;

        (c)解析:将符号引用转成直接引用;

     (3) 初始化:对类的静态变量,静态代码块执行初始化操作

 

类什么时候才被初始化
  1)创建类的实例,也就是new一个对象
  2)访问某个类或接口的静态变量,或者对该静态变量赋值
  3)调用类的静态方法
  4)反射(Class.forName(“com.lyj.load”))
  5)初始化一个类的子类(会首先初始化子类的父类)
  6)JVM启动时标明的启动类,即文件名和类名相同的那个类

加载器 
  JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述: 

 

以上是关于java类加载和对象初始化的主要内容,如果未能解决你的问题,请参考以下文章

java中类与对象的加载顺序

my java note -------类的初始化和加载

Java 面向对象(十四)

类加载器和对象创建的过程

Java对象初始化顺序

java new一个对象的过程