实例仅在Java中的一行中变量

时间:2013-02-06 10:51:49

标签: java instance-variables

你好stackoverflow成员, 你知道为什么Java Class中的实例变量只能在一行而不是在2中声明吗? 例如:

String ring;
ring = "indeed"; 

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

例如:

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

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

4 个答案:

答案 0 :(得分:1)

您可以使用稍微不同的语法获得所需内容。考虑:

class Ringo{
 String ring;

 { 
  ring = "indeed";
 }
}

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

答案 1 :(得分:0)

如果用大括号括起作业,技术上是可行的:

String ring;
{
    ring = "indeed";
}

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

答案 2 :(得分:0)

声明和初始化之间存在差异。宣言是一种分配和解决的问题。初始化是一个充满信息的内存。它必须用不同的语法和规则来表示。

语言也需要照顾美学。当Java被编写时,我想这就是对美学的需求。当Pascal的架构师重写.NET C#时,我猜他们做的不同。从Java和Pascal中学到了很多东西。

答案 3 :(得分:0)

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

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

单行如

private int x = 1;

可能看起来像关于执行代码(“它创建一个实例变量”),但实际上它有两个方面,实际上它们在产生影响的时间方面是分开的。在Java中,没有变量在运行时创建,例如在Ruby中。

当你牢记这一点时,你会发展出正确的直觉,即前一行在性质上与

非常不同
x = 1;

在课堂中间。