1

我正在重新初始化本地类的成员变量,并且出现编译错误。这里有什么问题?为什么这不会编译?谢谢!

这不会编译

public class TestSomething {

public void someMethod(){
    class LocalClassInner{
        int i=100; // Error on this line.Syntax error on token ";", , expected

        i=200;
    }       
}

}   

这编译得很好

public class TestSomething {

public void someMethod(){
    class LocalClassInner{
        int i=100;
        //i=200;
    }       
}}
4

3 回答 3

2

这不是真正的本地阶级问题。您不能将赋值语句放在任何类的“顶级”。

赋值语句需要放在方法、构造函数、静态初始化器或实例初始化器中。

当你写

int i = 100;

您实际上是在声明内部类的一个字段(如您所知)。您可以重新分配此字段,前提是您在构造函数、方法等中这样做了。

附录

以下使用实例初始化器,只是为了好玩:

public void someMethod() {
    class LocalClassInner {
        int i = 100;
        {i=200;}
    }           
}

它编译得很好,见http://ideone.com/qjnv3

于 2012-07-07T23:16:43.190 回答
0

第二个任务错了。您不能将常规代码放在方法、构造函数或初始化程序之外。这与匿名类无关。

于 2012-07-07T23:22:20.160 回答
0

如果你想改变 i 的分配,它需要进入一个方法。

像这样:

public class TestSomething {

public void someMethod(){
    class LocalClassInner{
        int i=100;
        private void setI()
        {
            i=200;
        }
    }       
}}
于 2012-07-07T23:22:25.087 回答