Java 中 try , return , finally , throw 使用总结:
问:try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
问题补充:
我已经调试过了哈~~是在return 之前执行的哈~~谢谢这位老兄的回答
(1) 当 try 中抛出异常且 catch 中有 return 语句, finally 中没有 return 语句, java 先执行 catch 中非 return 语句,再执行 finally 语句,最后执行 catch 中 return 语句。详见情况一。
(2) 当 try 中抛出异常且 catch 中有 return 语句, finally 中也有 return 语句, java 先执行 catch 中非 return 语句,再执行 finally 中非 return 语句,最后执行 finally 中 return 语句,函数返回值为 finally 中返回的值。详见情况二。
(3) Throw (无能是 catch 中还是非 catch 中)后面不能再跟 code ,否则编译不能通过。详见下面情况三,四,五。
Return , finally 总结:
情况一,代码如下:
public class Test {
public int testTry(){
FileInputStream fi=null;
try{
fi=new FileInputStream("");
}catch(FileNotFoundException fnfe){
System.out.println("this is FileNotFoundException");
return 1;
}catch(SecurityException se){
System.out.println("this is SecurityException");
}finally{
System.out.println("this is finally");
}
return 0;
}
public static void main(String[] args) {
Test t= new Test();
System. out .println(t.testTry());
}
}
Output :
this is FileNotFoundException
this is finally
1
情况二,代码修改如下:
public class Test {
public int testTry(){
FileInputStream fi=null;
try{
fi=new FileInputStream("");
}catch(FileNotFoundException fnfe){
System.out.println("this is FileNotFoundException");
return 1;
}catch(SecurityException se){
System.out.println("this is SecurityException");
}finally{
System.out.println("this is finally");
return 3;
}
//return 0;
}
public static void main(String[] args) {
Test t= new Test();
System. out .println(t.testTry());
}
}
Output :
this is FileNotFoundException
this is finally
3
----------------------------------------------------
Return throw 总结:
情况三:
public class Test {
public static void main(String[] args) {
Test t=new Test();
try{
System.out.println(t.testTry());
}catch(Exception e){
System.out.println("this is exception");
}
}
public int testTry()throws Exception{
FileInputStream fi=null;
try{
fi=new FileInputStream("");
}catch(FileNotFoundException fnfe){
//System.out.println("this is FileNotFoundException");
throw new Exception();
return 1;
}catch(SecurityException se){
System.out.println("this is SecurityException");
}finally{
System.out.println("this is finally");
}
return 0;
}
}
>javac Test.java
Test.java:22: 无法访问的语句
Return 1;
情况四:
public class Test {
public static void main(String[] args) {
Test t=new Test();
try{
System.out.println(t.testTry());
}catch(Exception e){
System.out.println("this is exception");
}
}
public int testTry()throws Exception{
FileInputStream fi=null;
try{
fi=new FileInputStream("");
}catch(FileNotFoundException fnfe){
//System.out.println("this is FileNotFoundException");
throw new Exception();
System.out.println("after throw exception");
// return 1;
}catch(SecurityException se){
System.out.println("this is SecurityException");
}finally{
System.out.println("this is finally");
}
return 0;
}
}
>javac Test.java
Test.java:22: 无法访问的语句
System.out.println("this is SecurityException");
情况五:
public class Test {
public static void main(String[] args) {
Test t=new Test();
try{
t.testTry();
}catch(Exception e){
System.out.println("this is exception");
}
}
public void testTry()throws Exception{
throw new Exception();
System.out.println("this is testTry method");
}
}
>javac Test.java
Test.java:22: 无法访问的语句
System.out.println("this is testTry method");
分享到:
相关推荐
标题“try-finally-return-in-finally.rar_return”暗示了我们正在讨论`return`语句如何与`finally`块内的`return`交互。在JavaScript中,如果`try`块或`finally`块包含`return`语句,程序的行为可能会变得复杂。 ...
try、catch、finally、return 执行顺序详细讲解 try、catch、finally、return 执行顺序是 Java 编程语言中的一种 exception 处理机制,用于处理程序中的异常情况。下面我们来详细讲解 try、catch、finally、return ...
即使在`try`或`catch`块中有return语句,`finally`块的代码也会被执行。 5. **多层嵌套** 你还可以在`try-catch-finally`结构内部嵌套另一个`try-catch-finally`结构,以处理更复杂的情况。这种方式使得异常处理...
标题 "try-catch-finally-return-in-finally.rar_return" 提到了 `try-catch-finally` 结构与 `return` 语句的交互,这涉及到程序执行流程的关键方面。 `try` 块是用来包含可能会抛出异常的代码。如果在 `try` 块中...
Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据
try-catch-finally捕获异常 try-catch-finally语句是Java语言中一种常用的异常处理机制,当程序在执行过程中出现异常时,可以使用try-catch-finally语句来捕获和处理异常。下面将详细介绍try-catch-finally语句的...
在 Java 规范中规定,在 try-catch-finally 中,如果 try-finally 或者 catch-finally 中都有 return,则两个 return 语句都执行,并且最终返回到调用者那里的是 finally 中 return 的值;而如果 finally 中没有 ...
即使`try`或`catch`块中存在`return`语句,`finally`块的代码也会被执行。这确保了程序的整洁和资源的有效管理。 在Java中,`try-catch-finally`结构可以单独使用,也可以嵌套使用。嵌套的`try-catch-finally`允许...
在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视
1. 如果`try`块中的代码没有抛出异常,那么`finally`块会在`try`块结束时执行,之后控制权将传递给相应的`return`语句。 2. 如果`try`块中的代码抛出一个未捕获的异常,`finally`块仍然会执行,然后再将异常传递给...
"Java中try finally return语句的执行顺序浅析" 关于Java中try finally return语句的执行顺序浅析是Java语言中一个重要的知识点,今天我们来探讨一下try finally return语句的执行顺序。 首先,需要了解的是...
2. **`return` 与 `finally` 的执行顺序**:在 `try` 块中遇到 `return` 时,会先执行 `finally` 语句块,然后再返回值。这是因为 `finally` 中的代码优先级高于 `return`,即使 `return` 已经被触发,`finally` ...
在这个过程中,函数会将`try`或`catch`块中的`return`语句返回的值暂存起来,然后执行`finally`块。 如果在`finally`块中也有`return`语句,那么这个`return`值会覆盖之前暂存的值。也就是说,最终返回给调用者的值...
第二:finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的后。可行的做法有四: 1、return语句只在函数后出现一次。 2、return语句仅在try和catch里面都出现。 3、...
即使在 `try` 块中有 `return` 语句或者 `goto` 语句导致程序流程提前离开,`finally` 块的代码也会被执行。这是 `finally` 关键字的核心特性,确保资源清理逻辑总是能够被执行,比如关闭文件、释放内存等。 以下是...
即使在`try`或`catch`块中有`return`语句,`finally`块的代码也会被执行。 ```csharp finally { // 无论是否发生异常都会执行的代码 } ``` 在示例中,无论`j`的值是否为0,`finally`块的`Console.WriteLine(j....
2. 如果`finally`块有`return`语句,无论`try`块是否包含`return`,`finally`块的`return`语句都将决定最终的返回值,因为`finally`总是被执行。 理解这一点对于编写健壮、可靠的Java代码至关重要,特别是涉及资源...
try-catch-finally执行顺序验证(左边是.java文件,右边是.class文件) 提示: try、catch块内的return操作编译后会变成把return的值保存到变量var的操作。 总结: try、catch块内的return操作编译后会变成把return的值...
3. finally语句可以与return语句结合使用,但是finally语句的返回值将覆盖try/catch中的return语句。 4. 在finally中写return语句会有警告,因为它会阻止函数抛出异常,而改为正常返回。 Java中finally和return的...
从结果可以看到,finally 块中的 return 语句会覆盖 try 块中的 return 语句,try 块中的 return 语句就不能返回了。 finally 语句是在 try 的 return 语句执行之后,return 返回之前执行的。 finally 块中的 ...