Java 局部变量不能指定为最终变量

Java 局部变量不能指定为最终变量,java,Java,我有一个变量要求我将其设置为final,但当设置为final时,我得到一个错误,错误如下:“无法指定final局部变量“enter”,因为它是在endclosing类型中定义的” 你怎么能声明这样一个变量 void yyyyyy(ActionEvent event){ final Scanner enter = null; try{ . . . enter = new Scaner(xxxxx); }catch(){ .... }finally{ if(enter != null){

我有一个变量要求我将其设置为final,但当设置为final时,我得到一个错误,错误如下:“无法指定final局部变量“enter”,因为它是在endclosing类型中定义的”

你怎么能声明这样一个变量

void yyyyyy(ActionEvent event){

final Scanner enter = null;

try{
.
.
.
enter = new Scaner(xxxxx);

}catch(){
....
}finally{
  if(enter != null){
}
}

现在声明变量,同时初始化它。因为它是最终的,所以不能多次为它赋值

若从初始化中删除赋值,仍然不能使该变量为final,因为在finally块中检查它是否为null。为了使该逻辑起作用,变量应该在某个地方显式地赋值为null。这是不可能的,因为try块可能在第一行抛出异常


无论什么要求您将变量设置为final,都可以忽略它。

您可以让它这样工作。正如其他一些答案所解释的,您不能为最终变量赋值两次


你可以让它像这样工作

void yyyyyy(final ActionEvent event) {
    Scanner enter = null;
    try {
        enter = new Scanner("/");
    } catch (final Exception exception) {

    } finally {
        enter.close();
    }
}

删除初始化:
final Scanner enter=null
->
final Scanner enter
我想我们需要看看在哪里使用
enter
。问题是null我在finally中使用它,因此我无法取出null语句,那么您不需要将它声明为
final
。或者(肯定)在
尝试之前初始化它。关键是
final
变量只能赋值一次。你说的“要求我将其设置为final”到底是什么意思?