使用简写表示法声明和初始化变量:类与局部变量

时间:2015-05-23 21:59:00

标签: java

我遇到了错误Syntax error on token ";", , expected。当我使用简写表示法将变量声明并初始化为类变量时会发生这种情况。如果我初始化并声明变量的方式与局部变量完全相同,则不会发生此错误。

代码看起来完全像这样:

public class SomeClass{ 

double number1, number2; //On this line I get the error I mention above.
number1 = number2 = 1.0;

}

为什么在使用这种表示法声明和初始化类变量时会出现此错误?

3 个答案:

答案 0 :(得分:1)

如果它是一个字段,则只会出现此错误,因此我假设这是一个字段。

这是因为number1 = number2 = 1.0;没有初始化类的字段。相反,它是一行代码必须位于方法块的一侧。

要解决此问题,您可以在方法或构造函数中初始化它,或执行:

double number1 = 1.0, number2 = 1.0;

答案 1 :(得分:1)

声明类变量时,需要将其保持未初始化状态或同时初始化。如果您想稍后初始化它,可以将代码放在构造函数

public class MyClass {
  double number1 = 1.0, number2;

  public MyClass {
    number2  = 2.0;
  }

}

答案 2 :(得分:1)

这应该有效

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 http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-ClassBody

ClassBodyDeclaration:
  ClassMemberDeclaration
  InstanceInitializer
  StaticInitializer
  ConstructorDeclaration

ClassMemberDeclaration:
  FieldDeclaration
  MethodDeclaration
  ClassDeclaration
  InterfaceDeclaration
  ;

出于某种原因,允许使用空语句:)

class Foo
{
    ;
}

(不是真的 - 孤独&#34 ;;"被简单地丢弃,不算作声明)