Java 使用速记法声明和初始化变量:类变量与局部变量
我在令牌“;”上遇到了一个错误Java 使用速记法声明和初始化变量:类变量与局部变量,java,Java,我在令牌“;”上遇到了一个错误语法错误,应该是。当我使用简写符号将变量声明和初始化为类变量时,就会发生这种情况。如果我以与局部变量完全相同的方式初始化和声明变量,则不会发生此错误 代码看起来完全像这样: public class SomeClass{ double number1, number2; //On this line I get the error I mention above. number1 = number2 = 1.0; } 为什么在使用此符号声明和初始化类变量时会
语法错误,应该是。当我使用简写符号将变量声明和初始化为类变量时,就会发生这种情况。如果我以与局部变量完全相同的方式初始化和声明变量,则不会发生此错误
代码看起来完全像这样:
public class SomeClass{
double number1, number2; //On this line I get the error I mention above.
number1 = number2 = 1.0;
}
为什么在使用此符号声明和初始化类变量时会出现此错误?此错误仅在它是字段时发生,因此我假设它是字段
这是因为number1=number2=1.0代码>未初始化类的字段。相反,它是一行代码,必须位于方法块的一侧
要解决此问题,您可以在方法或构造函数中初始化它,或者执行以下操作:
double number1 = 1.0, number2 = 1.0;
在声明类变量时,需要保持其未初始化状态,或者同时初始化一个类变量。如果以后要初始化它,可以将代码放入构造函数中
public class MyClass {
double number1 = 1.0, number2;
public MyClass {
number2 = 2.0;
}
}
这应该行得通
public class SomeClass
{
double number1, number2;
{
number1 = number2 = 1.0;
}
}
不能直接在类主体中编写语句;通常语句位于方法体中;它们也可以出现在静态或实例初始值设定项块中
public class Foo
{
static{ print("foo"); } // executed during class initialization
{ print("foo"); } // executed in constructor
print("foo"); // Error!
}
JLS
由于某些原因,允许使用空语句:)
(不是真的-孤零零的“;”被简单地丢弃,不算作一个语句)在这里工作很好:。尝试用再现错误所需的所有代码更新问题。@Radiodef错误在第二行,而不是第一行。仅仅因为它说错误在一个地方,并不意味着它是由其他地方引起的,在这种情况下,它是由number1=number2=1.0引起的代码>@Forseth11您在这里做了很多假设。Kermit应该更新这个问题,这样我们就不会猜测了。@Radiodef更新了代码,使其看起来与我的IDE中的完全一样。@Radiodef我假设的原因是:“java中出现错误的唯一方法是如果它是类中的字段。”(事实证明,我在新编辑中的假设是正确的。)我很惊讶这不是(可能还没有)在我目前工作的书中提到。我非常感谢您提供的信息丰富且写得很好的答案。实例初始值设定项块不经常使用。但有时它会很方便……我期待着有机会应用这些知识。
ClassBodyDeclaration:
ClassMemberDeclaration
InstanceInitializer
StaticInitializer
ConstructorDeclaration
ClassMemberDeclaration:
FieldDeclaration
MethodDeclaration
ClassDeclaration
InterfaceDeclaration
;
class Foo
{
;
}