【问题标题】:Java Compilation error 12 : error: <identifier> expected : Initializing and declaring of variable in separate statement . [duplicate]Java 编译错误 12:错误:<identifier> 预期:在单独的语句中初始化和声明变量。 [复制]
【发布时间】:2017-08-11 12:25:58
【问题描述】:

在编译以下代码时,出现“错误:预期”错误:

class Test {

    public static void main(String[] args) {
         Hello h=new Hello();
         System.out.println(h.a);

    }
}

class Hello {

    int a;
    a=10;
    /*{
    a=10
    }

}*/ //Putting the reference variable inside the Instance block .

但是,如果在类 Hello 中的同一语句(int a=10;)中声明和初始化变量“a”,则不会出错。

【问题讨论】:

  • a=10 在那个地方无效,就这么简单。
  • @litelite,你可以但必须把它放在像{ a = 10;}这样的块语句中
  • @AxelH 不好的建议。为什么将他与初始化程序块混淆? Plain int a = 10 完成了工作。
  • @GhostCat,同意,但他说(不是 OP,但他现在删除了他的评论......)我们不能在不正确的方法之外使用该语句,块语句是一个想法。没有评论,这看起来像是一个糟糕的建议:p PS:我在评论时从不看代码的简单性,毕竟它可能/应该是minimal reproducible example ;)
  • 同意大家的看法,但我怀疑为什么我必须在同一个语句中声明和初始化,以及声明和初始化变量与此有何不同?

标签: java


【解决方案1】:

问题是你有一个浮动初始化语句,你需要有类似下面的东西:

class Test {

    public static void main(String[] args) {
         Hello h=new Hello();
         System.out.println(h.a);

    }
}

class Hello {

    int a = 10; //changed this line

}

当一个变量被简单命名时,如下所示,它被声明。声明变量会创建内存分配,定义变量类型(例如intchar 等)并为变量命名(在您的情况下为 a)。

当你初始化一个变量时,上面的所有信息都是已知的,你只需将变量从它的默认值更改为一个新值。

您无法从class Test 中初始化变量的原因是Java 的创建者(和维护者)设置的规则。有趣的是,当您尝试以下 Eclipse 时会阻止您进行编译:

public class Test {
    int i;
    i = 10;
}

所以我认为这可能是 IDE 的一个安全特性,所以我从命令行运行:

这被标记为标识符预期错误。简而言之,Java 的创建考虑到当您创建一个类级别变量时,它必须在同一行中声明和初始化,或者只是声明,以及从 Java 代码 -> 字节码 -> 机器代码(JVM, Java 虚拟机),尚未用于处理该范围级别的多行初始化。

【讨论】:

  • 浮动初始化语句是什么意思?将实例变量“a”放在块中也可以正常工作。为什么我需要在同一个语句中声明和初始化变量?
  • 我更新了更多信息,希望对您有所帮助。在找到一个好的答案之前,我必须自己做一些探索!
猜你喜欢
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多