21xrx.com
2024-12-22 20:19:02 Sunday
登录
文章检索 我的文章 写文章
「Java生命周期:探究几种状态」——从代码角度深入了解
2023-06-19 05:03:06 深夜i     --     --
Java 生命周期 状态

Java作为一门面向对象的高级编程语言,其生命周期涉及到了程序的运行、加载、初始化、卸载等众多方面。那么,Java生命周期到底有几种状态?每种状态又代表什么意义?下面就一起来深入了解。

Java主要有5种状态,分别是:加载(Loading)、连接(Linking)、初始化(Initialization)、使用(Using)和卸载(Unloading)。

1. 加载(Loading)

加载阶段是指查找并加载编译好的.class文件,并将其转化成可以程序运行的字节码的过程。主要由ClassLoader的loadClass()方法实现,这个方法负责读取.class文件的二进制流并将其转换成Java对象。

以下代码展示了通过ClassLoader获得Class对象的具体过程:


ClassLoader loader = ClassLoader.getSystemClassLoader();

Class clazz = loader.loadClass("com.example.Test");

2. 连接(Linking)

连接阶段是指将类或接口的二进制数据合并到JVM中,并且解析符号引用,生成对应的直接引用。连接阶段主要由三个过程构成:验证(Verification)、准备(Preparation)和解析(Resolution)。

以下代码展示了连接阶段的一部分操作:


public class Test {

  public static void main(String[] args) {

    String str = "Hello, World!";

    System.out.println(str);

  }

}

// 编译后的字节码如下

0: ldc      #2         // String Hello, World!

2: astore_1

3: getstatic   #3         // Field java/lang/System.out:Ljava/io/PrintStream;

6: aload_1

7: invokevirtual #4         // Method java/io/PrintStream.println:(Ljava/lang/String;)V

3. 初始化(Initialization)

初始化阶段是指执行类型构造器 ()方法的过程,只有当类被第一次主动使用时(new、getstatic、putstatic或invokestatic),JVM才会对其进行初始化操作。在该阶段中,主要是按照类变量初始化的顺序对变量进行初始化赋值,并执行静态代码块中的代码。除此之外,调用其他类的静态方法或访问静态变量等操作都会触发初始化操作。

以下代码展示了静态代码块的初始化效果:


public class Test {

  static {

    System.out.println("Static block of Test class has been executed!");

  }

  public Test() {

    System.out.println("Constructor of Test class has been executed!");

  }

}

public class Main {

  public static void main(String[] args) {

    Test t1 = new Test();

    Test t2 = new Test();

  }

}

// 输出结果

Static block of Test class has been executed!

Constructor of Test class has been executed!

Constructor of Test class has been executed!

4. 使用(Using)

使用阶段是指执行程序时,执行new、getstatic、putstatic或invokestatic等指令而导致某个类的初始化阶段完成之后,程序正式进入该类的方法体并开始执行。此时该类已经被完全初始化。

以下代码展示了代码使用时的效果:


public class Test {

  private String name;

  public void setName(String name)

    this.name = name;

  

  public void showName() {

    System.out.println("Your name is " + name);

  }

}

public class Main {

  public static void main(String[] args) {

    Test t1 = new Test();

    t1.setName("Tom");

    t1.showName();

  }

}

// 输出结果

Your name is Tom

5. 卸载(Unloading)

卸载阶段是指当类不再被程序使用时,由JVM回收它的过程。JVM会根据GC算法自动对其进行垃圾回收(GC),卸载阶段也就是一个类被回收的过程。

本篇文章主要介绍了Java生命周期的五种状态,分别是加载、连接、初始化、使用和卸载。对于Java程序开发者而言,深刻理解这几个状态,可以帮助他们更好地掌握Java程序的执行过程。

  
  

评论区

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