Java变量必须在自己的范围内初始化?

时间:2012-07-22 02:38:43

标签: java variable-assignment

我有一些代码,我有一个需要冗长类声明的变量。我想在页面顶部定义变量,然后像下面那样定义它:

private IFoo bar;
/* seemingly irrelevant code */
bar = new IFoo() { /* a bunch of stuff */ };

但是我的Java编译器抱怨说这不会发生。它说在之前的}上有一个语法错误(这实际上没有意义,因为它在适当的位置)。

为了安静编译器,我已将变量的定义放在更多{ }内 。我忘了这个模式被称为什么,但我知道为什么它存在,在我的情况下不应该真的有必要。

{
    bar = new IFoo() { /* a bunch of stuff */ };
}

无论如何,我想我的问题是,为什么我不能这样做 bar = new IFoo(){}; 而不是 { bar = new IFoo(){}; }

其他细节:IFoo是一个界面,我正在使用JDK 1.6与Android和Eclipse。

定义bar立即正常工作:

private IFoo bar = new IFoo() { /* stuff */ };

1 个答案:

答案 0 :(得分:4)

它不起作用的原因是Java不允许独立代码。您必须将代码放在方法,构造函数或初始化程序中。

这是初始化程序:

private IFoo bar = new IFoo() { /* a bunch of stuff */ };

这是一个声明,后面是作业:

private IFoo bar;
/* seemingly irrelevant code */
bar = new IFoo() { /* a bunch of stuff */ };

如果你的bar是一个局部变量(你需要删除private),你可以在函数中执行此类操作。但是在课堂宣言中是不允许的。

在赋值周围添加花括号使得代码成为构造函数的一部分,再次允许赋值。这就是为什么以下任务有效:

{
    bar = new IFoo() { /* a bunch of stuff */ };
}