gpt4 book ai didi

java - init block 阻塞了构造函数?

转载 作者:太空宇宙 更新时间:2023-11-04 13:54:12 26 4
gpt4 key购买 nike

我试图测试 Java 中 init block 和构造函数的工作情况。当一个对象被创建时,首先执行init block ;然后执行构造函数。如果没有提供用户定义的构造函数,则编译器会提供默认构造函数。我尝试过以下代码:

class A
{int a;
public static void main(String arr[])
{A a1=new A();
System.out.println(a1.a);
} }

这个程序的输出是0,这是很明显的;但是,当我尝试以下程序时:

class A
{int a;
//init block
{a=12; }
public static void main(String arr[])
{A a1=new A();
System.out.println(a1.a);
} }

我得到了答案12,但是根据执行流程,init block (设置a=12)应该首先执行,然后是构造函数。这里默认的构造函数应该在init block 之后执行,并且a的值应该是0。为什么a的值是12?

最佳答案

创建 A 的新实例后,您将在主方法中打印 A 的值。所以它已经设置好了(如果没有,你就无法访问“未创建”对象的变量,对吧?)

<小时/>

如果您想在创建过程中测试变量a的值,请运行此代码

class A {

public A(){
System.out.println("The value of a in constructor is: " + a);
}

int a;
{
System.out.println(a);
a = 12;
System.out.println(a);
}

public static void main(String arr[]) {
A a1 = new A();
}
}

它有这样的输出:

0
12
The value of a in constructor is: 12

关于java - init block 阻塞了构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30002665/

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