gpt4 book ai didi

java - 为什么将变量初始化封装到初始化 block 中允许在声明之前进行初始化?

转载 作者:行者123 更新时间:2023-11-30 01:57:22 25 4
gpt4 key购买 nike

考虑以下代码:

class New {
id = 2;
int id = 7;
}

显然,当我们尝试初始化未声明的变量时,它不会编译。

但是,将语句封装到初始化 block 中可以使其编译成功:

class New {
{ id = 2; }
int id = 7;
}

初始化 block 的“功能”是什么,使得声明前的初始化有效?

在提出问题之前,我阅读了几篇关于 SO 上的初始化 block 的文章,但它们似乎主要解决初始化顺序的问题(例如静态与非静态)。

最佳答案

重点是 id = 2; 是一条语句,可以将其放入初始化 block 中。

您的第一个代码不是因为声明顺序而非法,而是因为您不能使用代码块之外的语句。这个也失败了:

class New {      
int id = 7;
id = 2;
}

实例变量的声明可以出现在类中的任何位置。与初始化 block 完全无关。

例如,您的代码相当于

class New {
New() { id = 2; }
int id = 7;
}

根据您的问题,这也是非法的,因为初始化发生在声明之前。

如果这让您感到困惑,请习惯始终在类开头声明实例变量的约定。

关于java - 为什么将变量初始化封装到初始化 block 中允许在声明之前进行初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53944229/

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