gpt4 book ai didi

java - 非静态 block 在静态 block 之前执行

转载 作者:行者123 更新时间:2023-12-02 15:24:30 26 4
gpt4 key购买 nike

我有两个顶级类(BaseClass 和 B),BaseClass 中有 main 方法,还有内部类(名为 Laptop)。我知道每当加载类时都会执行静态 block ,但对于以下代码:

           package kkk;

public class BaseClass
{

static BaseClass e=new BaseClass();


public BaseClass()
{
System.out.println("In baseclass constructor");
}

{
System.out.println("in baseclass nonstatic block");
}

static
{
System.out.println("in baseclass static block");
}

protected static class Laptop
{
int x=8;

public Laptop()
{
System.out.println("Inside laptop class");
}

void m1()
{
System.out.println("Inside inner class method");
}
}



public void hem()
{
System.out.println("In base class hem");
}



public static void main(String args[])
{

e.hem();
System.out.println("In main method baseclass");
B h=new B();
h.bhel();
}
}

B 类
{
无效的 bhel()
{
BaseClass.Laptop obj=new BaseClass.Laptop();
System.out.println(obj.x);
对象.m1();
}
}

通过运行上面的代码,我得到的输出为:

in baseclass nonstatic block
In baseclass constructor
in baseclass static block
In base class hem
In main method baseclass
Inside laptop class
8
Inside inner class

e 是静态引用变量,必须为其分配内存。因此,静态 block 被执行。但是,为什么非静态 block 在静态 block 之前执行??

最佳答案

所有静态变量声明和静态初始化 block 都按照它们在初始化类时在源代码中出现的顺序求值/执行。

static BaseClass e=new BaseClass();

这会在初始化类时创建 BaseClass 的实例,并导致在执行构造函数之前调用实例初始化 block 。

由于这一行出现在静态初始化 block 之前,它在该 block 之前执行,这意味着实例初始化 block 在静态初始化 block 之前被调用。

关于java - 非静态 block 在静态 block 之前执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31000335/

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