Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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 为什么局部内部类需要局部变量Final?此变量位于本地内部类定义的相同方法中_Java_Inner Classes - Fatal编程技术网

Java 为什么局部内部类需要局部变量Final?此变量位于本地内部类定义的相同方法中

Java 为什么局部内部类需要局部变量Final?此变量位于本地内部类定义的相同方法中,java,inner-classes,Java,Inner Classes,为什么局部内部类需要局部变量Final?此变量位于本地内部类定义的相同方法中如果我们不使用final关键字,它将给出编译错误。 //为什么后面的局部变量“final String z”需要final关键字 final String z="local variable"; class MyInner { public void seeOuter(){ System.out.println("Outer x is "+x);

为什么局部内部类需要局部变量Final?此变量位于本地内部类定义的相同方法中如果我们不使用final关键字,它将给出编译错误。

//为什么后面的局部变量“final String z”需要final关键字

    final String z="local variable";
    class MyInner {
        public void seeOuter(){
            System.out.println("Outer x is "+x);
            System.out.println("Local variable z is "+z);
        }
    }
    MyInner my=new MyInner();
    my.seeOuter();
}
}

因为内部类在实例化时会获得环境的副本

如果不将
z
声明为最终版本,则可能出现如下情况:

  String z = "variable";

  class MyInner {
        public void seeOuter(){
            System.out.println("Outer x is "+x);
            System.out.println("Local variable z is "+z);
        }
    }
  MyInner my=new MyInner();

  z = "another value";

  my.seeOuter();
但是,
MyInner
的上下文是在实例化时创建的,因此这将导致
seeeouter
访问不同的
z
(在更改之前绑定)值,这将产生误导(并且是错误的,因为您没有预料到)

  String z = "variable";

  class MyInner {
        public void seeOuter(){
            System.out.println("Outer x is "+x);
            System.out.println("Local variable z is "+z);
        }
    }
  MyInner my=new MyInner();

  z = "another value";

  my.seeOuter();