深入剖析Java中的各种异常处理方式

1. 调试追踪代码:

public static void enterTryMethod() {

System.out.println("enter after try field");

}

public static void enterExceptionMethod() {

System.out.println("enter catch field");

}

public static void enterFinallyMethod() {

System.out.println("enter finally method");

}

2. 抛出Exception,没有finally,当catch遇上return

public static int catchTest() {

int res = 0;

try {

res = 10 / 0; // 抛出Exception,后续处理被拒绝

enterTryMethod();

return res; // Exception已经抛出,没有获得被执行的机会

} catch (Exception e) {

enterExceptionMethod();

return 1; // Exception抛出,获得了调用方法并返回方法值的机会

}

}

后台输出结果:

enter catch field

1

3. 抛出Exception,当catch体里有return,finally体的代码块将在catch执行return之前被执行

public static int catchTest() {

int res = 0;

try {

res = 10 / 0; // 抛出Exception,后续处理被拒绝

enterTryMethod();

return res; // Exception已经抛出,没有获得被执行的机会

} catch (Exception e) {

enterExceptionMethod();

return 1; // Exception抛出,获得了调用方法并返回方法值的机会

} finally {

enterFinallyMethod(); // Exception抛出,finally代码将在catch执行return之前被执行

}

}

后台输出结果:

enter catch field

enter finally method

1

4. 不抛出Exception,当finally代码块里面遇上return,finally执行完后将结束整个方法

public static int catchTest() {

int res = 0;

try {

res = 10 / 2; // 不抛出Exception

enterTryMethod();

return res; // 获得被执行的机会,但执行需要在finally执行完成之后才能被执行

} catch (Exception e) {

enterExceptionMethod();

return 1;

} finally {

enterFinallyMethod();

return 1000; // finally中含有return语句,这个return将结束这个方法,不会在执行完之后再跳回try或者catch继续执行,方法到此结束

}

}

后台输出结果:

enter after try field

enter finally method

1000

5. 不抛Exception,当finally代码块里面遇上System.exit()方法将结束和终止整个程序,而不只是方法

public static int catchTest() {

int res = 0;

try {

res = 10 / 2; // 不抛出Exception

enterTryMethod();

return res; // 获得被执行的机会,但由于finally已经终止程序,返回值没有机会被返回

} catch (Exception e) {

enterExceptionMethod();

return 1;

} finally {

enterFinallyMethod();

System.exit(0); // finally中含有System.exit()语句,System.exit()将退出整个程序,程序将被终止

}

}

后台输出结果:

enter after try field

enter finally method

6. 抛出Exception,当catch和finally同时遇上return,catch的return返回值将不会被返回,finally的return语句将结束整个方法并返回

public static int catchTest() {

int res = 0;

try {

res = 10 / 0; // 抛出Exception,后续处理将被拒绝

enterTryMethod();

return res; // Exception已经抛出,没有获得被执行的机会

} catch (Exception e) {

enterExceptionMethod();

return 1; // Exception已经抛出,获得被执行的机会,但返回操作将被finally截断

} finally {

enterFinallyMethod();

return 10; // return将结束整个方法,返回值为10

}

}

后台输出结果:

enter catch field

enter finally method

10

7. 不抛出Exception,当finally遇上return,try的return返回值将不会被返回,finally的return语句将结束整个方法并返回

public static int catchTest() {

int res = 0;

try {

res = 10 / 2; // 不抛出Exception

enterTryMethod();

return res; // 获得执行机会,但返回将被finally截断

} catch (Exception e) {

enterExceptionMethod();

return 1;

} finally {

enterFinallyMethod();

return 10; // return将结束整个方法,返回值为10

}

}

后台输出结果:

enter after try field

enter finally method

10

结论Java的异常处理中,程序执行完try里面的代码块之后,该方法并不会立即结束,而是继续试图去寻找该方法有没有finally的代码块

如果没有finally代码块,整个方法在执行完try代码块后返回相应的值来结束整个方法

如果有finally代码块,此时程序执行到try代码块里的return一句之时并不会立即执行return,而是先去执行finally代码块里的代码

若finally代码块里没有return或没有能够终止程序的代码,程序在执行完finally代码块代码之后再返回try代码块执行return语句来结束整个方法。若 finally 代码块里有 return 或含有能够终止程序的代码,方法将在执行完 finally 之后被结束,不再跳回 try 代码块执行 return

在抛出异常的情况下,原理也是和上面的一样的,你把上面说到的 try 换成 catch 去理解就OK了。

相关阅读:

Oracle 数据库优化实战心得总结

yii权限控制的方法(三种方法)

JavaScript作用域链示例分享

win10 10074怎么开启暗黑主题模式?

非常经典的PHP文件上传类分享

android使用PopupWindow实现页面点击顶部弹出下拉菜单

JSP bean获取各种参数

Android五大布局与实际应用详解

Win8系统如何查看mac地址?Win8系统查看mac地址的两种方法

Windows出现BOOT\BCD错误的解决办法

js动态添加的DIV中的onclick事件简单实例

Asp.Net URL重写的具体实现

C#中Decimal类型截取保留N位小数并且不进行四舍五入操作

javascript实现数字+字母验证码的简单实例

java中的异常处理代码,java_深入剖析Java中的各种异常处理方式,1. 调试追踪代码:public s - phpStudy...相关推荐

  1. try catch语句 java_深入剖析java的try…catch…finally语句

    一.前言 前些天参加面试的时候有一道题: public classtest { public static voidmain(String[] args){try{return; }finally{ ...

  2. usercf代码java_基于用户的协同过滤算法(UserCF)原理以及代码实践

    简介 协同过滤(collaborative filtering)是一种在推荐系统中广泛使用的技术.该技术通过分析用户或者事物之间的相似性,来预测用户可能感兴趣的内容并将此内容推荐给用户.这里的相似性可 ...

  3. 中移物联网答案java_【分享】中移物联网校园招聘笔试-java

    今天笔试了中移物联网的java开发实习岗位.一共33道题. 单选题 1.关于java注解,下列说法错误的是() A.注解用@interface定义  B.Target元注解可以用来控制注解作用范围   ...

  4. 计算器的程序代码java_求用JAVA编写的计算器程序代码

    展开全部 import java.awt.*;//引入包java.awt中所有的类 import java.awt.event.*;//引入包java.awt.event中所有的类. public c ...

  5. 贪吃蛇代码java_贪吃蛇 java代码

    展开全部 自己写着玩的,很简单32313133353236313431303231363533e78988e69d8331333262363032,你试一试哦... 主要用了javax.swing.T ...

  6. java 多线程的同步问题_java多线程解决同步问题的几种方式,原理和代码

    wait()/notify()方法 await()/signal()方法 BlockingQueue阻塞队列方法 PipedInputStream/PipedOutputStream 阻塞队列的一个简 ...

  7. JAVA 代码交互率低的原因分析,深入剖析Java编程中的中文问题及建议最优解决方法...

    说明:本文为作者原创,作者联系地址为: josserchai@yahoo.com .由于 Java 编程中的中文 问题是一个老生常谈的问题,在阅读了许多关于 Java 中文问题解决方法之后,结合作者的 ...

  8. python中如何调用java_在Python程序中调用Java代码的实现

    有头发且有趣的码农万里挑一~ 14 有料叔 | 一位有故事的程序猿 前 言 开发Python程序,需求中需要用到Java码,Python作为"胶水"语言能够很好的实现这种需求.具体 ...

  9. java异常在哪一层捕获_当在一个方法的代码中抛出一个检测异常时,该异常或被方法中的 ( )结构 捕获,或者在方法的 ( ) 中声明_学小易找答案...

    [填空题]当异常已经被定义时,必须通过( ) 语句来处理它. [填空题]Catch 子句包含( )的程序段 [单选题]下列java语言的常用异常类中,属于检测异常的是() [单选题]自定义异常类时,可 ...

最新文章

  1. 生成器、迭代器的区别?
  2. python开发环境配置config_manjaro与python开发环境配置
  3. word2vec代码_TensorFlow2.0 代码实战专栏(四):Word2Vec (Word Embedding)
  4. css js html记录
  5. 【opencv】7. cv::VideoWriter的使用,把图片写进video
  6. 【Linux】一步一步学Linux——ls命令(29)
  7. 17年三月计算机二级,2017年3月计算机二级考试攻略
  8. switch语句php,PHPswitch 语句 - PHP教程
  9. 值从哪里来_内存频率是怎么算出来的?2133MHz这么奇怪的数字是怎么来的?
  10. 监控视频转发方案探讨-内网转外网
  11. 关于Windows 2003 sp1不能打开CHM文件的问题
  12. Appium+Python之PO模型(Page object Model)
  13. oracle数据库表空间追加数据库文件方法
  14. tensorflow 77 tensorflow android版本demo win10 下 编译
  15. android手机怎么投屏到电视盒子,Android手机与电视同步投屏详细教程
  16. 台达plc与串口软件通讯测试,台达PLC串口通信
  17. 新视野大学英语视听说听力:passage12原文及答案(前四单元)
  18. java 麻将小程序_麻将小程序麻将这么玩
  19. 饥荒专用服务器全图显示代码,饥荒联机地图全开代码
  20. Python爬虫学习之路——python IED工具介绍(一)

热门文章

  1. 软硬一体打天下,英特尔在 AI 上做了些什么?
  2. 2020已过大半,量子计算机发展如何了?
  3. 支付即服务、门店小程序、微信先享卡分别亮相,微信支付持续助力行业数字化升级
  4. 活跃了 40 年的 AWK 现在怎么样了?
  5. 踢翻这碗狗粮:程序员花 7 个月敲出 eBay,只因女票喜欢糖果盒!
  6. 卖掉 3000 平房子,50 岁程序员回国写代码,三个月内融资 2000 万美元
  7. 半小时训练亿级规模知识图谱,亚马逊这个 AI 框架要火!
  8. 为什么程序员如此“嫌弃”主干开发模式?
  9. 支离破碎的 Android
  10. 小小的 Python 编程故事