【问题标题】:Variable not initialized in try catch block `finally`变量未在 try catch 块`finally`中初始化
【发布时间】:2014-12-13 03:07:12
【问题描述】:

为什么编译器不理解变量是在trycatch 块中初始化的 并在finally 块抱怨?

int i;
try {
    i = 0;
}
catch (Exception e) {
    i = 2;
}
finally {
    System.out(i);
}

【问题讨论】:

    标签: java syntax compiler-errors


    【解决方案1】:

    如果初始化语句 (i = 0;) 失败,则程序将继续执行 finally 块,其中变量仍将未初始化,这就是您收到编译时错误的原因。

    【讨论】:

    【解决方案2】:

    如果你在初始化之前在 catch 块中打印变量“i”,它会给出错误,因为编译器认为在 try 块中设置“i”之前可能会引发异常,在这种情况下,“i”不会被初始化,所以finally 是这种情况,即当您在 finally 块中打印 'i' 时,编译器认为在 catch 块中设置 'i' 之前可能会引发异常,在这种情况下,'i' 不会被初始化

    编译器不理解变量是在 try 块还是 catch 块中初始化的。编译器抱怨,因为局部变量应该同时声明和初始化,但你刚刚声明了它。如果你在没有初始化的任何一个块(try、catch、finally)中使用它,编译器就会抱怨它。试试看:

        int i;
        try {
            System.out.println(i);
            //i = 0;
        }
        catch (Exception e) {
            System.out.println(i);
            //i = 2;
        }
        finally {
            System.out.println(i);
        }
    

    【讨论】:

      【解决方案3】:

      编译器无法知道i 是否会被初始化。它可能因任何原因而失败,因此 finally 块可能无法正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-09
        • 1970-01-01
        • 2015-09-05
        • 1970-01-01
        • 2018-10-03
        相关资源
        最近更新 更多