`
huiqinbo
  • 浏览: 344534 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

try return finally

阅读更多

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");

 

分享到:
评论
1 楼 mobeicanglang 2012-05-23  
我觉得楼主的例子全部都有错误,题目明明说的是try{}语句中有return语句,又没有说catch块中,也没有说try..catch块中。你的例子都是写的catch块。

相关推荐

    try-finally-return-in-finally.rar_return

    标题“try-finally-return-in-finally.rar_return”暗示了我们正在讨论`return`语句如何与`finally`块内的`return`交互。在JavaScript中,如果`try`块或`finally`块包含`return`语句,程序的行为可能会变得复杂。 ...

    try、catch、finally、return 执行顺序.doc

    try、catch、finally、return 执行顺序详细讲解 try、catch、finally、return 执行顺序是 Java 编程语言中的一种 exception 处理机制,用于处理程序中的异常情况。下面我们来详细讲解 try、catch、finally、return ...

    使用try-catch-finally处理异常

    即使在`try`或`catch`块中有return语句,`finally`块的代码也会被执行。 5. **多层嵌套** 你还可以在`try-catch-finally`结构内部嵌套另一个`try-catch-finally`结构,以处理更复杂的情况。这种方式使得异常处理...

    try-catch-finally-return-in-finally.rar_return

    标题 "try-catch-finally-return-in-finally.rar_return" 提到了 `try-catch-finally` 结构与 `return` 语句的交互,这涉及到程序执行流程的关键方面。 `try` 块是用来包含可能会抛出异常的代码。如果在 `try` 块中...

    Jungle68#-#[Java] try catch finally,try里有return,finally还执行么?1

    Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据

    try-catch-finally捕获异常

    try-catch-finally捕获异常 try-catch-finally语句是Java语言中一种常用的异常处理机制,当程序在执行过程中出现异常时,可以使用try-catch-finally语句来捕获和处理异常。下面将详细介绍try-catch-finally语句的...

    java 中finally语句块与return的执行关系

    在 Java 规范中规定,在 try-catch-finally 中,如果 try-finally 或者 catch-finally 中都有 return,则两个 return 语句都执行,并且最终返回到调用者那里的是 finally 中 return 的值;而如果 finally 中没有 ...

    try_catch_finally异常处理java

    即使`try`或`catch`块中存在`return`语句,`finally`块的代码也会被执行。这确保了程序的整洁和资源的有效管理。 在Java中,`try-catch-finally`结构可以单独使用,也可以嵌套使用。嵌套的`try-catch-finally`允许...

    try~catch~finally中关于return的问题

    在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视

    Java finally语句到底是在return之前还是之后执行?

    1. 如果`try`块中的代码没有抛出异常,那么`finally`块会在`try`块结束时执行,之后控制权将传递给相应的`return`语句。 2. 如果`try`块中的代码抛出一个未捕获的异常,`finally`块仍然会执行,然后再将异常传递给...

    关于Java中try finally return语句的执行顺序浅析

    "Java中try finally return语句的执行顺序浅析" 关于Java中try finally return语句的执行顺序浅析是Java语言中一个重要的知识点,今天我们来探讨一下try finally return语句的执行顺序。 首先,需要了解的是...

    浅谈Java中return和finally的问题

    2. **`return` 与 `finally` 的执行顺序**:在 `try` 块中遇到 `return` 时,会先执行 `finally` 语句块,然后再返回值。这是因为 `finally` 中的代码优先级高于 `return`,即使 `return` 已经被触发,`finally` ...

    try catch finally的执行顺序深入分析

    在这个过程中,函数会将`try`或`catch`块中的`return`语句返回的值暂存起来,然后执行`finally`块。 如果在`finally`块中也有`return`语句,那么这个`return`值会覆盖之前暂存的值。也就是说,最终返回给调用者的值...

    关于Java中的try-catch-finally语句和return

     第二:finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的后。可行的做法有四:  1、return语句只在函数后出现一次。  2、return语句仅在try和catch里面都出现。  3、...

    C++ 中try finally关键字详解

    即使在 `try` 块中有 `return` 语句或者 `goto` 语句导致程序流程提前离开,`finally` 块的代码也会被执行。这是 `finally` 关键字的核心特性,确保资源清理逻辑总是能够被执行,比如关闭文件、释放内存等。 以下是...

    C#中的try catch finally用法分析

    即使在`try`或`catch`块中有`return`语句,`finally`块的代码也会被执行。 ```csharp finally { // 无论是否发生异常都会执行的代码 } ``` 在示例中,无论`j`的值是否为0,`finally`块的`Console.WriteLine(j....

    谈谈Java中try-catch-finally中的return语句

    2. 如果`finally`块有`return`语句,无论`try`块是否包含`return`,`finally`块的`return`语句都将决定最终的返回值,因为`finally`总是被执行。 理解这一点对于编写健壮、可靠的Java代码至关重要,特别是涉及资源...

    try-catch-finally执行顺序验证

    try-catch-finally执行顺序验证(左边是.java文件,右边是.class文件) 提示: try、catch块内的return操作编译后会变成把return的值保存到变量var的操作。 总结: try、catch块内的return操作编译后会变成把return的值...

    Java中finally和return的关系实例解析

    3. finally语句可以与return语句结合使用,但是finally语句的返回值将覆盖try/catch中的return语句。 4. 在finally中写return语句会有警告,因为它会阻止函数抛出异常,而改为正常返回。 Java中finally和return的...

    浅谈Java finally语句到底是在return之前还是之后执行(必看篇)

    从结果可以看到,finally 块中的 return 语句会覆盖 try 块中的 return 语句,try 块中的 return 语句就不能返回了。 finally 语句是在 try 的 return 语句执行之后,return 返回之前执行的。 finally 块中的 ...

Global site tag (gtag.js) - Google Analytics