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

标签 java

我有两个顶级类(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/

相关文章:

java - postTweet 方法返回 null

java - 构造函数 SignalStrength() 不可见?该怎么办?

java - 算法改进 : Keeping circle at boundary of a defined shape

java - 如何更改S3Client.getURL的格式

java - 文件到数组 - Java

java - 使用 Hibernate 验证日期

java - 从子类中的抽象类扩展嵌套类,并使方法使用嵌套类的新定义

java - 如何通过 simpleframework 解析带有没有父元素列表的 XML

java - JTree For 循环数组语法

java - 在 Java 下的 Saxon 中加载和验证 XML 文件和架构的示例代码