21xrx.com
2024-11-22 11:46:42 Friday
登录
文章检索 我的文章 写文章
Java生命周期的四个阶段:从类加载到对象销毁
2023-06-14 21:07:16 深夜i     --     --
Java 生命周期 类加载 对象创建 对象使用 对象销毁 JVM 构造函数 垃圾回收

Java的生命周期可以分为四个阶段:类加载、对象创建、对象使用和对象销毁。在这篇文章中,我们将讨论这些阶段的细节,并提供代码示例来帮助您更好地理解Java的生命周期。

第一阶段:类加载

Java程序在执行前首先要将类加载到内存中,这个过程叫做类加载。当Java虚拟机(JVM)执行一个程序时,它需要找到并加载程序所需的所有类。类加载的过程可以动态地从网络或文件系统中加载类。

Java中的类加载过程包括以下步骤:

1. 加载:

找到和加载类的二进制代码文件。

2. 验证:

验证类是否符合Java语言规范。

3. 准备:

为类的静态变量赋予默认值。

4. 解析:

将符号引用转换成直接引用。

5. 初始化:

为静态变量赋值,执行静态代码块的代码。

代码示例:


public class A {

  static {

    System.out.println("A is initialized.");

  }

}

public class Test {

  public static void main(String[] args) {

    A a = new A();

  }

}

输出结果:


A is initialized.

第二阶段:对象创建

在类加载之后,JVM通过调用构造函数新建一个对象实例。Java中的对象都在堆(heap)中分配空间。在对象创建时,会分配内存,并调用构造函数进行初始化。

代码示例:


public class Person {

  private String name;

  private int age;

  public Person() {

    System.out.println("Person object is created.");

  }

}

public class Test {

  public static void main(String[] args) {

    Person p = new Person();

  }

}

输出结果:


Person object is created.

第三阶段:对象使用

当对象创建完毕后,它就可以被使用了。对象的使用包括所有对其方法的调用和所有对其属性的访问。一个对象一旦创建就可以在程序的所有范围内使用。

代码示例:


public class Person {

  private String name;

  private int age;

  public Person(String name, int age)

    this.name = name;

    this.age = age;

  

  public void sayHello() {

    System.out.println("Hello, my name is " + name + ", I'm " + age + " years old.");

  }

}

public class Test {

  public static void main(String[] args) {

    Person p = new Person("Tom", 20);

    p.sayHello();

  }

}

输出结果:


Hello, my name is Tom, I'm 20 years old.

第四阶段:对象销毁

当一个对象不再使用时,它就可以被销毁了。Java的垃圾回收机制会自动回收不再使用的对象。如果一个对象长时间不被使用,JVM将会把它从内存中回收,释放分配给该对象的空间。

代码示例:


public class Person {

  private String name;

  private int age;

  public Person(String name, int age)

    this.name = name;

    this.age = age;

  

  public void finalize() {

    System.out.println("Person object is destroyed.");

  }

}

public class Test {

  public static void main(String[] args) {

    Person p = new Person("Tom", 20);

    p = null;

    System.gc();

  }

}

输出结果:


Person object is destroyed.

本文涉及的

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复