Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法重新初始化匿名类成员_Java_Anonymous Class - Fatal编程技术网

Java 无法重新初始化匿名类成员

Java 无法重新初始化匿名类成员,java,anonymous-class,Java,Anonymous Class,我正在重新初始化一个局部类的成员变量,并得到一个编译错误。这里怎么了?为什么不编译?谢谢 这不会编译 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; // Error on this line.Syntax error on token ";", , expected

        i=200;
    }       
}

}   
这个编译得很好

public class TestSomething {

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

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

赋值语句需要放在方法、构造函数、静态初始值设定项或实例初始值设定项中

当你写信的时候

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

附录

以下使用实例初始值设定项只是为了好玩:

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

它编译得很好,请参见第二个赋值错误。不能将常规代码放在方法、构造函数或初始值设定项之外。这与匿名类无关。

如果要更改i的赋值,则需要在方法中进行

像这样:

public class TestSomething {

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

谢谢你,雷。这很有道理。只希望编译器错误更有意义。