这篇文章主要讨论的是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执行顺序验证(左边是.java文件,右边是.class文件) 提示: try、catch块内的return操作编译后会变成把return的值保存到变量var的操作。 总结: try、catch块内的return操作编译后会变成把return的值...
try、catch、finally、return 执行顺序超详细讲解,包看包会。
首先执行try,如果有异常执行catch,无论如何都会执行finally,当有return以后,函数就会把这个数据存储在某个位置,然后告诉主函数,我不执行了,接下来你执行吧,所以函数就会推出
主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下
3. 但是如果有 finally块的话,那么,finally 几乎是必定会执行的,但是这里有一个先后顺序的问题,应该是 finally 块和 打印异常堆栈将会在另外一个线程之中执行,所以 打印的顺序就很有意思了。 4. 如果在try或者...
主要介绍了关于java中的一道面试题,这套题就是在try中含return语句时代码的执行顺序,这个问题看似简单,却暗藏杀机啊!文中通过一个个例子详细介绍了其中玄机,需要的朋友可以参考学习,下面来一起看看吧。
5.finally段的代码无论是否发生异常都会执行。 6.在一个try语句块中,基类异常的捕获语句不可以写在子类异常捕获语句的上面。 看一个例子: /** * @author Lansine *
finally是监听程序是否在try或者catch中执行 下面列举的是try执行的语句是一个异常错误的情况 下面列举的是try执行语句是一个正确的情况 异常类的一个继承顺序图,异常类中的属性列表 catch中的表达式的几种...
名称 Perl::Core - 单个导入中的 Perl 核心要素 版本 版本 0.0100 概要 use Perl::Core;... – 使用try/catch/finally关键字进行正常的异常处理 错误 请在 bugtracker 网站上报告任何错误或功能请
try, catch,finally ,return 执行顺序 100 异常的处理办法之二,声明异常: throws子句 101 方法重写中声明异常原则 102 异常的处理办法之三,手动抛出异常,throw子句 103 自定义异常 103 使用异常机制建议 104 ...
finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 13、sleep()...
实例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...
77.try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗? 78.常见的异常类有哪些? 八、网络 79.http 响应码 301 和 302 代表的是什么?有什么区别? 80.forward 和 redirect 的区别? 81.简述 tcp...
try 、finally 、catch 什么是 Error 内部类 创建内部类集合 Iterable 接口顶层接口 ArrayList Vector LinkedList 类Stack HashSet TreeSet LinkedHashSet 类 PriorityQueue HashMap TreeMap 类 LinkedHashMap 类 ...
Q0027 哪些SQL语句在执行时是自动提交的? 数据定义语言DDL是自动提交的。 Q0028 索引对数据库的影响? 提高查询速度 Q0029 主外键有什么关系? 外键是从某个表的一个字段指向另外一个表的主健字段,两个字段的类型...
finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 16、sleep...
6、单击统计结果表格的表头时,会按正反序进行排序,文件名按字母顺序排序;其他统计 数字按数字大小进行排序! 关于扩展的使用方法: 扩展就是通过继承basecount包里的BaseCount类,实现它的countTypeFile方法...
52. JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗? 13 53. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 13 54. java中有几种...
// 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount, // ThreadCount,UserModeTime,WriteOperation String caption = Bytes.substring(line, capidx, cmdidx - 1) .trim();...