gpt4 book ai didi

java - 为什么实例初始化 block 比构造函数先执行?

转载 作者:行者123 更新时间:2023-12-01 22:07:10 24 4
gpt4 key购买 nike

我无法确切理解为什么此代码给出输出 0?

public class Poly
{
public static void main(String[] args)
{
Square sq=new Square(10);
}
}

class Square
{
int side;
Square(int a)
{
side=a;
}
{
System.out.print("The side of square is : "+side);
System.out.println();
}
}

我想问什么-

  1. 为什么它显示输出 0,而不是 10?

  2. 为什么实例初始化 block 先初始化然后再初始化构造函数?

最佳答案

完全初始化整个对象不是实例初始化程序的工作,您可以有多个初始化程序,每个初始化程序处理不同的事情。当您有多个初始化 block 时,它们按照它们在文件中出现的顺序从上到下运行,并且它们不能包含前向引用。 This article by Bill Venners有很多有用的细节。

另一方面,构造函数负责初始化整个对象。一旦构造函数运行,对象就被初始化,它应该处于有效状态并准备好使用。

因此,如果实例初始化程序在构造函数之后运行,它将不会初始化,而是会更改已设置的内容。因此初始化程序必须在构造函数之前运行。

关于java - 为什么实例初始化 block 比构造函数先执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32482181/

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