java对象生命周期解析

TheDisguiser 2020-09-11 15:57:44 java常见问答 8034

java中的核心之一就是对象,了解对象的生命周期才能更好的使用对象,下面就来看看对象的生命周期分为哪几步。

第一步:类的初始化

在java中,只有当Java类被第一次使用时,JVM才会对该Java类进行初始化,在初始化过程中静态代码块会和静态域按照编写顺序依次执行,当开始访问Java类或接口中的静态域时,只有真正声明这个域的类或接口时才会被初始化。例如:在类A中声明了静态域value,类B继承自类A。通过B.value可以直接访问类A中声明的静态域value。虽然引用时使用的类B,但是由于value是

在类A中声明的,因此B.value只会初始化类A,类B不会被初始化。
/**
 * @author lzzz
 *
 */
public class J17101901
{
    public static void main(String[] args)
    {
        System.out.println(B.value);
        /*
         out:
         A static
         1
         */
    }
}
class A
{
    static int value = 1;
    static
    {
        System.out.println("A static");
    }
}
class B extends A
{
    static
    {
        System.out.println("B static");
    }
}

第二步:对象的创建

在实际创建对象之前分配内存空间。所需的内存空间大小取决于Java类及其父类和祖先类包含的所有实例域的数量和类型。

内存分配成功之后将所有实例域设为默认值。

调用构造方法,类的构造方法调用过程分成三步:

一是调用父类的构造方法,没有显示定义将会调用默认构造方法。

二是按照书写顺序初始化类中的实例域。

三是执行类的构造方法中的相应代码。

/**
 * @author lzzz
 *
 */
public class J17100805
{
    static
    {
        System.out.println("father static{}");
    }
    {
        System.out.println("father {}");
    }
    private int id = print("father private int id");
    private static int staticId = print("father private static int");
    public static int print(String str)
    {
        System.out.println(str);
        return 1;
    }
    public static void main(String[] args)
    {
        J17100805 j1 = new J17100805();
        System.out.println("--------我在j1之后--------");
        J17100805 j2 = new J17100805();
        System.out.println("--------我在j2之后--------");
        J17100805 j3 = new J17100805();
        System.out.println("\n--------我是分割线--------\n");
        System.out.println("--------我在jj1之后--------");
        J171008051 jj2 = new J171008051();
        System.out.println("--------我在jj2之后--------");
        J171008051 jj3 = new J171008051();
        /*
         father static{}
         father private static int
         father {}
         father private int id
         --------我在j1之后--------
         father {}
         father private int id
         --------我在j2之后--------
         father {}
         father private int id
        
         --------我是分割线--------
        
         --------我在jj1之后--------
         child static{}
         child private static int
         father {}
         father private int id
         child {}
         child private int id
         --------我在jj2之后--------
         father {}
         father private int id
         child {}
         child private int id
         */
    }
}

第三步:当不需要对象时,对象终止

Java中采用自动内存管理机制,对象回收工作会由垃圾回收器自动完成,如若一定要手动处理相关工作,可以使用finalize方法。

以上就是本篇文章的所有内容,更多java常见问题及解决方法敬请关注奇Q工具网了解详情。

推荐阅读:

java对象的概念是什么?

java对象转map怎么操作?map如何转化成Java对象?

java对象数组怎么实现?对象数组是什么?