Java变量必须在其自己的作用域中初始化?

Java变量必须在其自己的作用域中初始化?,java,variable-assignment,Java,Variable Assignment,我有一些代码,其中有一个变量需要一个冗长的类声明。我想在页面顶部定义变量,然后在以后这样定义: private IFoo bar; /* seemingly irrelevant code */ bar = new IFoo() { /* a bunch of stuff */ }; 但是我的Java编译器抱怨说这不可能发生。它说在前一行的}上有一个语法错误(这真的没有意义,因为它位于正确的位置) 为了让编译器安静下来,我将变量的定义放在了more{} . 我忘了这个模式叫什么,但我知道它为什

我有一些代码,其中有一个变量需要一个冗长的类声明。我想在页面顶部定义变量,然后在以后这样定义:

private IFoo bar;
/* seemingly irrelevant code */
bar = new IFoo() { /* a bunch of stuff */ };
但是我的Java编译器抱怨说这不可能发生。它说在前一行的
}
上有一个语法错误(这真的没有意义,因为它位于正确的位置)

为了让编译器安静下来,我将变量的定义放在了more
{}
. 我忘了这个模式叫什么,但我知道它为什么存在,在我的案例中不应该是必要的

{
    bar = new IFoo() { /* a bunch of stuff */ };
}
不管怎样,我想我的问题是,为什么我不能这么做呢
bar=newifoo(){}和非
{bar=new IFoo(){};}

其他详细信息:
IFoo
是一个接口,我在Android和Eclipse中使用JDK1.6

定义
bar
立即就可以了:

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

它不起作用的原因是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 */ };
}

你可能想考虑创建一个。我真的花了一点时间试图使这个问题看起来很漂亮……SSCCE不是一个很好的问题,它是一个短代码示例,我们可以在IDE中运行,以查看您所看到的确切问题。它可以帮助我们解决您的问题,这样我们就可以更快地给您提供更好的答案
class c{private Object o;o=new Object();}
哦,您说得对。我明白了,现在我有了一些“独立代码”。我想我只是盯着这个问题看得太久了。