gpt4 book ai didi

java - 为什么我不能在下一行分配?

转载 作者:行者123 更新时间:2023-12-01 07:54:48 27 4
gpt4 key购买 nike

为什么下面的代码会编译

class Foo {
Object x;
String s = (String) x;
}

以下内容无法编译?

class Foo {
Object x;
String s;
s = (String) x;
}

我是否缺少一些JLS规则?我知道这一定很愚蠢,但我仍然需要知道其背后的原因。

最佳答案

non-static block (此处标记为 { } )可以访问变量方法。此 block 在构造函数执行期间调用,就在调用父类(super class)构造函数之后。

因此,可以在该 block 中进行初始化。

您可以在一行中或在非静态 block 内与声明一起初始化实例变量。

然后,一旦调用构造函数,就会发生此初始化。(因为,它遵循 block 中代码的执行)。

因此,该 block 实际上是构造函数执行的一部分。

另一方面,如果您在类本身中编写初始化代码,则它没有任何意义,因为没有方法执行该行,因此是不正确的。

所以,方法 1:初始化和声明:

class Foo {
Object x;
String s = (String) x;
}

或者,方法 2:在声明后在 block 中初始化:

class Foo {
Object x;
String s;
{
s = (String) x;
}
}

记住,这个非静态 block 是在构造函数执行期间、调用父类(super class)构造函数之后调用的。

关于java - 为什么我不能在下一行分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31503983/

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