`
wsqwsq000
  • 浏览: 675965 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

try、catch&finally的执行顺序

    博客分类:
  • j2ee
 
阅读更多
这篇文章主要讨论的是try、catch、finally模块的执行顺序。先看下面一个例子:
 
public static String doTrySeq(){
  
  try {  
            System.out.println("try");          //1
            int i = 12/0;                             //2
            //System.out.println("It's the next step after throwed exception");   //8
            return "try";                             //3
        }catch(Exception e){
         System.out.println("catch");        //4
            return "catch";                         //5
        }
  finally {  
            System.out.println("finally");     //6
            return "finally";                         //7
        }  
        //return "out";                               //9
 }
 
public static void main(String[] args) {
  System.out.println("where return? " + doTrySeq());
}
 
 
输出结果:
try
catch
finally
where return? finally
 
 执行顺序如下:
1)先执行1、2,在2处抛出异常,跳到catch代码块(此时跳过了3)
2)执行4、5。这里很多人认为执行return,所以直接退出并返回值。但事实并不是的,在java中,try、catch,无论执行了什么代码,最后都必须进入finally代码块。(当然,你如果用System.exit(0);这个是系统强制退出,没辙,肯定会退出去,不会执行下面的finally)
3)执行6、7,执行到7时,这时finally代码已经执行完,本应该跳回try继续下一步,但因为finally代码块中有return,所以退出方法并返回了“finally”
 
 

下面将注释catch和finally中的return,即注释掉5、7,取消8、9的注释
执行结果为:
try
catch
finally
where return? out
 
在执行2时,抛异常,这时跳到catch代码块,再执行finally代码块,之后跳出方法,执行9
可以看出,try中如果抛异常,程序会跳出对应的try-catch-finally模块,而出现异常的代码句下面的代码将不会被执行
分享到:
评论

相关推荐

    try-catch-finally执行顺序验证

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

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

    try、catch、finally、return 执行顺序超详细讲解,包看包会。

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

    首先执行try,如果有异常执行catch,无论如何都会执行finally,当有return以后,函数就会把这个数据存储在某个位置,然后告诉主函数,我不执行了,接下来你执行吧,所以函数就会推出

    C#中的try catch finally用法分析

    主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下

    trycatchfinaly

    3. 但是如果有 finally块的话,那么,finally 几乎是必定会执行的,但是这里有一个先后顺序的问题,应该是 finally 块和 打印异常堆栈将会在另外一个线程之中执行,所以 打印的顺序就很有意思了。 4. 如果在try或者...

    java面试题之try中含return语句时代码的执行顺序详解

    主要介绍了关于java中的一道面试题,这套题就是在try中含return语句时代码的执行顺序,这个问题看似简单,却暗藏杀机啊!文中通过一个个例子详细介绍了其中玄机,需要的朋友可以参考学习,下面来一起看看吧。

    Java异常发生时程序的执行顺序

     5.finally段的代码无论是否发生异常都会执行。  6.在一个try语句块中,基类异常的捕获语句不可以写在子类异常捕获语句的上面。  看一个例子:   /** * @author Lansine *

    C#异常处理的技巧和方法

    finally是监听程序是否在try或者catch中执行 下面列举的是try执行的语句是一个异常错误的情况 下面列举的是try执行语句是一个正确的情况 异常类的一个继承顺序图,异常类中的属性列表 catch中的表达式的几种...

    Perl-Core:单个导入中的 Perl 核心要素

    名称 Perl::Core - 单个导入中的 Perl 核心要素 版本 版本 0.0100 概要 use Perl::Core;... – 使用try/catch/finally关键字进行正常的异常处理 错误 请在 bugtracker 网站上报告任何错误或功能请

    JAVA基础课程讲义

    try, catch,finally ,return 执行顺序 100 异常的处理办法之二,声明异常: throws子句 101 方法重写中声明异常原则 102 异常的处理办法之三,手动抛出异常,throw子句 103 自定义异常 103 使用异常机制建议 104 ...

    java 面试题 总结

    finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 13、sleep()...

    java范例开发大全(pdf&源码)

    实例47 try…catch…finally捕获异常的实例 67 实例48 try…catch嵌套捕获异常的实例 68 4.4 throws声明异常 69 实例49 throws声明异常实例一 69 实例50 throws声明异常实例二 70 4.5 throw抛出异常 72 实例51 throw...

    Java常见面试题208道.docx

    77.try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗? 78.常见的异常类有哪些? 八、网络 79.http 响应码 301 和 302 代表的是什么?有什么区别? 80.forward 和 redirect 的区别? 81.简述 tcp...

    Java 基础核心总结 +经典算法大全.rar

    try 、finally 、catch 什么是 Error 内部类 创建内部类集合 Iterable 接口顶层接口 ArrayList Vector LinkedList 类Stack HashSet TreeSet LinkedHashSet 类 PriorityQueue HashMap TreeMap 类 LinkedHashMap 类 ...

    java面试800题

    Q0027 哪些SQL语句在执行时是自动提交的? 数据定义语言DDL是自动提交的。 Q0028 索引对数据库的影响? 提高查询速度 Q0029 主外键有什么关系? 外键是从某个表的一个字段指向另外一个表的主健字段,两个字段的类型...

    超级有影响力霸气的Java面试题大全文档

    finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 16、sleep...

    代码统计插件 eclipse plugin java

    6、单击统计结果表格的表头时,会按正反序进行排序,文件名按字母顺序排序;其他统计 数字按数字大小进行排序! 关于扩展的使用方法: 扩展就是通过继承basecount包里的BaseCount类,实现它的countTypeFile方法...

    java基础题 很全面

    52. JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗? 13 53. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 13 54. java中有几种...

    java在cpu的占有率

    // 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount, // ThreadCount,UserModeTime,WriteOperation String caption = Bytes.substring(line, capidx, cmdidx - 1) .trim();...

Global site tag (gtag.js) - Google Analytics