如果没有catch块,为什么需要finally语句?

时间:2016-01-27 14:45:42

标签: java exception

我知道try语句在没有catchfinally的情况下无效,而finally子句在try-catch块中是可选的。但是,当我编写没有trycatch的{​​{1}}语句时,编译器建议插入finally子句来完成try语句。

例如:

finally

错误代码:

try {
    for (int j = 0; j <= i.length; j++) {
            System.out.println(i[j]);
    }
} catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("Catch");
} //no errors

try {
    for (int j = 0; j <= i.length; j++) {
        System.out.println(i[j]);
    }
} //syntax error

为什么Exception in thread "main" java.lang.Error: Unresolved compilation problem: Syntax error, insert "Finally" to complete TryStatement at Driver.main(Driver.java:12) 是唯一推荐的语句?为什么不finally

&#34;尽管抛出异常,我可能希望发生一些事情,所以我可能不会以特定的方式处理特定的异常,但我可能希望确保至少发生SOMETHING泛型。如果我无法处理它,至少要做点什么。&#34;希望有人对此进行确认。

4 个答案:

答案 0 :(得分:1)

因为没有trycatch的{​​{1}}根本没有意义。它只是没有所以如果你省略try-block,你会得到相同的结果。

答案 1 :(得分:0)

要求<!DOCTYPE html> <html> <title>tryme</title> <head> </head> <body> <script> var instr = prompt("which instrument do you play?"); switch(instr) { case "violin": case "piano": alert("Me too!"); break; case "drums": case "ukulele": alert("sonds good"); break; case "whistle": alert("omg!!!"); break; default: alert("whatever..."); } </script> <noscript>"your browser doesnt support javascript"</noscript> </body> </html> 语句具有trycatch子句,因为如果没有finally语句就没有意义

使用try语句的整个想法是,如果try-block抛出异常,则需要进行某种处理。此处理可以是捕获异常(使用try),也可以在块完成或抛出异常后执行某些操作(使用catch)。然后,没有与finally语句关联的此类操作会使try语句无意义。

答案 2 :(得分:0)

trycatch不能跟finally后跟catch 要修复它,请添加finallytry{ for(int j = 0; j <= i.length; j++) { System.out.println(i[j]); } } catch(ArrayIndexOutOfBoundsException e) { System.out.println("Catch"); }//no errors try{ for(int j = 0; j <= i.length; j++) { System.out.println(i[j]); } }//syntax error catch(Exception e) { // ... handle errors ... } finally { // ... cleanup that will execute whether or not an error occurred ... } 或两者,如下所示:

df.raster <- rasterize(df.sp, base.raster, field = "column", fun=median) 
plot(df.raster)

答案 3 :(得分:0)

finally保证finally块中的代码始终执行,无论是否存在异常,您可以在finally块中编写cleancode,但处理异常除外,例如关闭文件或关闭一个插座。 try-catch用于捕获的异常,您可以在本地修复它。