1

嗨 stackoverflow 成员,您知道为什么 Java 类中的实例变量必须仅在一行中声明,而不是在 2 中声明吗?例如:

String ring;
ring = "indeed"; 

它给出了编译错误。为什么不允许?像我在这个例子中那样做是没有意义的,但是使用该过程来初始化从超类继承的变量而不使用子类构造函数可能很有用。

例如:

class Ringo{
String ring;
}
class RingoStar extends Ringo{
ring = "That's how to play drums";
}

显然它给出了编译错误。这就是重点,有谁知道为什么不允许这样做?

4

4 回答 4

1

你可以用稍微不同的语法得到你想要的。考虑:

class Ringo{
 String ring;

 { 
  ring = "indeed";
 }
}

我想您的问题的答案是 Java 语法不允许在类主体中包含任何语句。您需要使用如上所示的初始化程序块(请参阅http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html)。

于 2013-02-06T10:57:49.223 回答
0

如果您将作业用大括号括起来,这在技术上是可行的:

String ring;
{
    ring = "indeed";
}

赋值在任何构造函数之前执行。

于 2013-02-06T10:58:45.193 回答
0

声明和初始化是有区别的。声明是分配和寻址的东西。初始化是用信息填充内存。它必须用不同的语法和规则来表示。

语言也需要照顾美学。写Java的时候,我猜这就是对美学的需求。当 Pascal 的架构师重写 .NET C# 时,我猜他们的做法有所不同。从 Java 和 Pascal 学习。

于 2013-02-06T11:08:21.183 回答
0

Java 文件有两个完全独立的方面:

  • 声明,在编译时采取行动;
  • 执行代码,在运行时执行。

单行如

private int x = 1;

看起来这一切都与执行代码有关(“它创建了一个实例变量”),但实际上它具有两个方面,实际上它们在发挥作用的时间方面存在很大差异。在 Java 中,从来没有在运行时创建变量,例如在 Ruby 中。

当你牢记这一点时,你会产生正确的直觉,即前一行在本质上与

x = 1;

在班级的中间。

于 2013-02-06T11:48:06.890 回答