为什么最终在java中有用?
作者:互联网
参见英文答案 > how to use finally 9个
我想知道为什么在尝试捕获测试后最终有用?在任何情况下,将执行finally语句之后定义的代码.
这两个代码有什么区别?
try{
int a = 1 / 0;
} catch(ArithmeticException e){
System.out.print("Hi");
} finally {
System.out.print("It's me again...");
}
并且:
try{
int a = 1 / 0;
} catch(ArithmeticException e){
System.out.print("Hi");
}
System.out.print("It's me again...");
即使出现错误,也会显示“我再次……”
解决方法:
对于初学者来说,如果System.out流关闭,并且catch块因此引发异常,那么finally块仍将被执行.所以这两者并不等同.所以在以下情况下:
System.out.close();
try{
int a = 1 / 0;
} catch(ArithmeticException e){
System.out.print("Hi");
} finally {
System.out.print("It's me again...");
}
最后,至少会尝试写出来.如果您在try-catch块之后编写它,则不会出现这种情况.
最终有用的原因有两个:
>通常有可能try块中的代码引发另一个异常,即catch块中指定的异常,在这种情况下最终仍将执行.
>如果try块中的返回/中断/继续语句在try块之外有效(例如,在for循环中尝试中断),如果在try之后写入它,则不会执行,最后也将被称为.这也会产生更优雅的代码.例如:
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try {
return br.readLine();
} finally {
br.close();
}
注意return语句:如果你在没有finally的情况下关闭文件,它将要求你定义一个变量等(此外,如果在读取文件时出现问题,它当然不会关闭文件).
>如果轮次上的catch块抛出异常,最后将再次执行.
它还允许您在抛出异常后执行某些操作,但不捕获异常:如果从未捕获异常,则会进一步抛出异常.的情况下:
try {
throw new SomeException("The culprit!");
} finally {
System.out.println("Some closing words.");
}
构造的SomeException及其堆栈跟踪不会被finally块“toched”:堆栈跟踪不会被更改.因此,错误修正程序可以找出最初抛出异常的位置.
一般来说,在最终离开try-catch(零或多个捕获)块之前编写必须完成的所有操作是很好的,因为它可以保护您免受各种极端情况的影响.
更多的是编程语言理论,return,break,continue,throw等都是代码路径改变机制.最后声明保护,如果出现这种行为,您将受到保护.如果以后Java的设计者会引入一种新的机制,你的代码仍然会受到“保护”.由于设计人员考虑了所有这些可能性,因此始终建议使用编程语言提供的基础结构.
标签:try-catch-finally,java 来源: https://codeday.me/bug/20190823/1700371.html