gpt4 book ai didi

java - java中的静态 block 和对象 block 访问

转载 作者:行者123 更新时间:2023-11-29 09:55:52 25 4
gpt4 key购买 nike

我读到了下面提到的对象 block :

class Check {

static {
System.out.println("hello from Static");
}
//object block
{
System.out.println("This is my object block");
}

public static void main(String args[]) {
}
}

这是程序的输出

Hello from Static

但是当我创建类的对象时,对象 block 就会被执行。 我看不懂jvm是怎么完成这个过程的。有垃圾收集器的作用吗?

class Check {

static {
System.out.println("hello from Static");
}
//object block

{
System.out.println("This is my object block");
}

public static void main(String args[]) {
System.out.println("hello from main");
Check obj = new check();
}
}

这是输出:

hello from Static
hello from main
This is my object block

最佳答案

static block 在类加载器加载类时执行(这通常是每个 JVM 实例执行一次,但我想你可以创建一些非常奇怪的情况,其中你有多个类加载器都加载类;但这不是一个非常初学者级别的情况)。每次创建该类(或其子类之一)的实例时,都会执行实例初始化程序 block 。您的程序要求:

  1. 该类由 JVM 加载;这会触发静态初始化 block (hello from Static)。
  2. 执行main静态方法
    1. println 被执行(hello from main)。
    2. 您创建了一个Check 的实例。这会触发实例初始化程序,导致 This is my object block

GC 与您询问的 FTR 行为没有任何关系。

关于java - java中的静态 block 和对象 block 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11969806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com