Java 异常: try...catch...finally

来源:互联网 发布:unity3d视频教程下载 编辑:程序博客网 时间:2024/05/16 09:41

在看下面的内容之前,想问大家一个问题:

finally 语句是不是一定会被执行 疑问


使用 Integer.valueOf 方法模拟异常,来说明关于 try catch finally 之间的问题。


示例 1:没有异常,正常情况

public class TryCatchFinally {public static void main(String[] args) {try {System.out.println("try statement     :-)");Integer.valueOf("2");} catch (NumberFormatException nfe) {System.out.println("catch statement   :-)");} finally {System.out.println("finally statement :-)");}}}

示例 2:没有异常,正常情况,但是 try 语句里面添加 return 
public class TryCatchFinally {public static void main(String[] args) {try {System.out.println("try statement     :-)");Integer.valueOf("2");return;} catch (NumberFormatException nfe) {System.out.println("catch statement   :-)");} finally {System.out.println("finally statement :-)");}}}

示例 1 和 示例 2 的运行结果一致:




示例 3:制造异常

public class TryCatchFinally {public static void main(String[] args) {try {System.out.println("try statement     :-)");Integer.valueOf("bluetooth");} catch (NumberFormatException nfe) {System.out.println("catch statement   :-)");} finally {System.out.println("finally statement :-)");}}}

示例 4:制造异常,catch 语句里面添加 return

public class TryCatchFinally {public static void main(String[] args) {try {System.out.println("try statement     :-)");Integer.valueOf("bluetooth");} catch (NumberFormatException nfe) {System.out.println("catch statement   :-)");return;} finally {System.out.println("finally statement :-)");}}}

示例 3 和 示例 4 的运行结果一致:




由此,可以看出以上四种情况,finally 语句都被执行了。


示例 5:制造异常,catch 语句里面添加 return


目的:验证finally代码块后面的代码是否会被执行 ??????

public class TryCatchFinally {public static void main(String[] args) {try {System.out.println("try statement     :-)");Integer.valueOf("bluetooth");} catch (NumberFormatException nfe) {System.out.println("catch statement   :-)");return;} finally {System.out.println("finally statement :-)");}System.out.println("out of try...catch...finally statement");}}

执行结果:




如果将 catch 语句里面添加 return 注释掉,执行结果:



示例 6:制造异常,try 语句里面添加 return 

public class TryCatchFinally {public static void main(String[] args) {try {System.out.println("try statement     :-)");Integer.valueOf("dd");return;} catch (NumberFormatException nfe) {System.out.println("catch statement   :-)");} finally {System.out.println("finally statement :-)");}System.out.println("out of try...catch...finally statement");}}

执行结果:




示例 7:无异常,try 语句里面添加 return 

public class TryCatchFinally {public static void main(String[] args) {try {System.out.println("try statement     :-)");Integer.valueOf("2");return;} catch (NumberFormatException nfe) {System.out.println("catch statement   :-)");} finally {System.out.println("finally statement :-)");}System.out.println("out of try...catch...finally statement");}}

执行结果(无异常,return 返回,所以finally代码块后面的语句就不会执行:-)




以上种种迹象表明:


finally 语句都被执行了,但是还有另外一种情况没有被验证,接着往下看 快哭了


就是在 try...catch... 里面退出 JVM :


public class TryCatchFinally {public static void main(String[] args) {try {System.out.println("try statement     :-)");Integer.valueOf("2eer");System.exit(0);} catch (NumberFormatException nfe) {System.out.println("catch statement   :-)");System.exit(0);} finally {System.out.println("finally statement :-)");}System.out.println("out of try...catch...finally statement");}}


执行结果:



try 或者 catch 语句里面(任意一个)调用 System.exit ,那么 finally 语句就不会被执行。


see also:http://stackoverflow.com/questions/18097496/java-exception-not-caught








原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 部队训练脚崴了怎么办 滴滴车型信息识别失败怎么办 先打人被打了怎么办 我被警察打了怎么办 2k13选秀卡住了怎么办 正当防卫二进去之后没有字怎么办 国土防线2子弹打完了怎么办 诛仙宠物满了怎么办 试用联盟认证手机号是空号怎么办 系统出新版本不显示更新怎么办 炉石账号封停怎么办 电脑用户名和密码忘了怎么办 黑猴子棒球1闪退怎么办 斗米兼职报名后怎么办 婴儿足跟血检查有异常怎么办 打印机显示脱机使用打印机怎么办 手机刷机后内存变小了怎么办 吃了解毒丹喝酒怎么办 6s更新ios11失败怎么办 苹果6s手机发热怎么办 苹果手机没有描述文件怎么办 电脑玩穿越火线卡怎么办 老电脑又卡又慢怎么办 梦幻之星4花屏怎么办 失业连续好多天睡不着觉怎么办 工业废气排放总量超标怎么办 lol美服更新不了怎么办 支付宝没法实名额度上限怎么办 苹果手机软件被禁止联网了怎么办 幽灵行动荒野黑屏怎么办打开游戏 幽灵行动荒野一点战役就秒退怎么办 华为账号密码忘了怎么办 ios荒野行动掉帧怎么办 一个人心理产生极度恐慌失眠怎么办 肺被子弹打穿了怎么办 文明5完整版锁区怎么办 2017文明5锁区怎么办 软件安装了错误补丁打不开怎么办 小米sd卡不可用怎么办 电视用遥控器关上打不开了怎么办 求生之路2控制台打不开怎么办