我试着测试Java中初始化代码块和构造函数的工作情况。创建对象时,首先执行init块;然后执行构造函数。如果未提供用户定义的构造函数,则编译器将提供默认构造函数。我已经尝试了以下代码:
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,但是根据执行流程,初始化块(设置a=12)应该首先执行,然后是构造函数。在这里,默认构造函数应该在init块之后执行,并且a的值应该是0。为什么12的值是12?
发布于 2015-05-02 21:13:39
在创建A的新实例之后,您将在main方法中输出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发布于 2015-05-02 21:15:56
初始化块在字段初始化后运行。因此,在设置了任何默认值或初始值之后,init块将始终看到字段值。Java不会在init代码运行后以某种方式设置字段值-这会使init块变得毫无意义。
构造函数在init块之后运行,但请注意,Java默认构造函数什么也不做。
https://stackoverflow.com/questions/30002665
复制相似问题