a class's lifetime

    xiaoxiao2021-03-25  94

           

    一、Load:装入类有关信息存入method area(finding and importing the binary data for a type)

           1、常量池(the constant pool for the type)

                1》按照类中使用常量的顺序存放常量信息(如string,integer,常量)             2》类、成员、方法 的symbolic references 。

              *如果别的类使用此类的常量,哪么就复制一份,放入自己的常量池中。

               类常量,类变量,都存入method area。

          2、类成员(field)信息

               成员名字,类型,修饰(public,private...)        

          3、方法信息:1》名字,返回类型(or void),参数的类型和个数,方法的(public,private...)                            2》方法的字节码,操作堆栈的大小,本地变量区。

         4、类变量Class Variables(类级别)          所有对象共享,当对象没建立(new)时也可以用,          存入方法区中,属于类数据,类数据使用之前,必须从method area 分配内存。

        5、A reference of class Class:通过reference 和 类对象连接,就可以取类运行时method area 存贮的信息。

             类对象:java.lang.Class 建立(new)每个装入的内存的.class文件 对象,变成Class的对象。

            1>Class p=Class.forName("ftypeinfo.toys.Person");//得到一个类 reference 

            2>Person p1= new Person();

               Class p=p1.getClass();://java.lang.Object 有 getClass 方法。

    二、Link

          1、Prepare:为类变量分配内存,初始化内存默认值( allocating memory for class variables and initializing the memory to default values)

          2、Resolve:

              

    三、initialize:初始化类变量值(invoking Java code that initializes class variables to their proper starting values.)

                主要两步:

                 1、初始化父类(如果有且父类未初始化)。

                 2、执行类的类初始化方法(初始化类变量和static块)

               类初始化方法(<clinit ()):就是由编译器把类里面的类变量初始化和static 初始化统一放入一个<clinit 方法里

             

    转载请注明原文地址: https://ju.6miu.com/read-34881.html

    最新回复(0)