[03] 为什么要使用异常机制
1、使用异常的好处
1.1 隔离常规代码和错误处理代码
//假如我们要实现将一个文件读入内存,实际上真正核心只需要下面5步
readFile {open the file;determine its size;allocate that much memory;read the file into memory;close the file;
}
//假如我们要实现将一个文件读入内存,实际上真正核心只需要下面5步
readFile {
open the file;
determine its size;
allocate that much memory;
read the file into memory;
close the file;
}
//为了处理文件不能打开、不能确定文件大小、内存分配不足等可能出现的意外,我们可能最终写成如下
errorCodeType readFile {initialize errorCode = 0;open the file;if (theFileIsOpen) {determine the length of the file;if (gotTheFileLength) {allocate that much memory;if (gotEnoughMemory) {read the file into memory;if (readFailed) {errorCode = -1;}} else {errorCode = -2;}} else {errorCode = -3;}close the file;if (theFileDidntClose && errorCode == 0) {errorCode = -4;} else {errorCode = errorCode and -4;}} else {errorCode = -5;}return errorCode;
}
//为了处理文件不能打开、不能确定文件大小、内存分配不足等可能出现的意外,我们可能最终写成如下
errorCodeType readFile {
initialize errorCode = 0;
open the file;
if (theFileIsOpen) {
determine the length of the file;
if (gotTheFileLength) {
allocate that much memory;
if (gotEnoughMemory) {
read the file into memory;
if (readFailed) {
errorCode = -1;
}
} else {
errorCode = -2;
}
} else {
errorCode = -3;
}
close the file;
if (theFileDidntClose && errorCode == 0) {
errorCode = -4;
} else {
errorCode = errorCode and -4;
}
} else {
errorCode = -5;
}
return errorCode;
}
readFile {try {open the file;determine its size;allocate that much memory;read the file into memory;close the file;} catch (fileOpenFailed) {doSomething;} catch (sizeDeterminationFailed) {doSomething;} catch (memoryAllocationFailed) {doSomething;} catch (readFailed) {doSomething;} catch (fileCloseFailed) {doSomething;}
}
readFile {
try {
open the file;
determine its size;
allocate that much memory;
read the file into memory;
close the file;
} catch (fileOpenFailed) {
doSomething;
} catch (sizeDeterminationFailed) {
doSomething;
} catch (memoryAllocationFailed) {
doSomething;
} catch (readFailed) {
doSomething;
} catch (fileCloseFailed) {
doSomething;
}
}
1.2 延迟处理
1.3 异常的精确定位
com.test9.MyException: 文件没有找到--02at com.test9.Test.g(Test.java:31)at com.test9.Test.main(Test.java:38)
Caused by: com.test9.MyException: 文件没有找到--01at com.test9.Test.f(Test.java:22)at com.test9.Test.g(Test.java:28)... 1 more
Caused by: java.io.FileNotFoundException: G:\myfile\struts.txt (系统找不到指定的路径。)at java.io.FileInputStream.open(Native Method)at java.io.FileInputStream.<init>(FileInputStream.java:106)at java.io.FileInputStream.<init>(FileInputStream.java:66)at java.io.FileReader.<init>(FileReader.java:41)at com.test9.Test.f(Test.java:17)... 2 more
com.test9.MyException: 文件没有找到--02
at com.test9.Test.g(Test.java:31)
at com.test9.Test.main(Test.java:38)
Caused by: com.test9.MyException: 文件没有找到--01
at com.test9.Test.f(Test.java:22)
at com.test9.Test.g(Test.java:28)
... 1 more
Caused by: java.io.FileNotFoundException: G:\myfile\struts.txt (系统找不到指定的路径。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at java.io.FileReader.<init>(FileReader.java:41)
at com.test9.Test.f(Test.java:17)
... 2 more
2、异常使用的注意事项
- 异常捕获后不做任何处理,就是耍流氓,挖坑埋自己
- 异常机制不要用来做流程或条件控制,因为处理效率较低
- try-catch若不触发catch是不影响性能的,但是try块仍然不要滥用包裹大量代码 (详见参考链接中相关文章)
- 方法出错该抛异常就抛异常,而不是返回一些错误码
3、参考链接
- 使用异常的优势
- 如何正确使用Java异常处理机制
- 浅析Java异常机制
- Java上的try catch并不影响性能
- Java程序猿必须懂的一些异常处理指引
4、异常方面的教训记录
4.1 关于try-catch和自定义Exception
转载于:https://www.cnblogs.com/deng-cc/p/7462539.html
[03] 为什么要使用异常机制相关推荐
- Python培训教程分享:Python异常机制
在学习Python技术的时候,我们经常会遇到一些异常,例如导致程序在运行过程中出现的中断或退出,我们都称之为异常,大多数的异常都不会被程序处理,而是以错误信息的形式展现出来.本期Python培训教 ...
- Java异常之异常机制
2019独角兽企业重金招聘Python工程师标准>>> Java异常处理机制依赖5个关键字try,catch,finally,throw,throws.try关键字后跟着可能出现异常 ...
- C# Note34: 异常机制相关小点
1.使用throw和throw ex抛出异常的区别 通常,我们使用try/catch/finally语句块来捕获异常,那么在抛出异常的时候,使用throw和throw ex有什么区别呢? 假如,按顺序 ...
- java的异常机制面试题(转)
java的异常机制面试题(转) 参考文章: (1)java的异常机制面试题(转) (2)https://www.cnblogs.com/ffaiss/p/11434639.html 备忘一下.
- Java异常机制及异常处理建议
Java异常机制及异常处理建议 参考文章: (1)Java异常机制及异常处理建议 (2)https://www.cnblogs.com/wangxilei/p/9522259.html 备忘一下.
- C++ 异常机制分析
C++ 异常机制分析 参考文章: (1)C++ 异常机制分析 (2)https://www.cnblogs.com/QG-whz/p/5136883.html 备忘一下.
- 全面理解java异常机制
在理想状态下,程序会按照我们预想的步骤一步一步的执行,但是即使你是大牛,你也不可避免出错,所以java为我们提供了异常机制.本文将会从以下几个方面介绍java中的异常机制: 异常机制的层次结构 异常的 ...
- Java异常处理及异常机制介绍
Java异常处理及异常机制介绍 当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可用...)时,JAVA就会用异常对象来描述. JAVA中用2种方法处理异常: 1.在发生异 ...
- Java的知识点19——异常机制Exception
异常(Exception)的概念 异常指程序运行过程中出现的非正常现象,例如用户输入错误.除数为零.需要处理的文件不存在.数组下标越界等. Java是采用面向对象的方式来处理异常的.处理过程: 1. ...
最新文章
- 如何合并多个Django项目?
- Fluently NHibernate 插入CLOB字段
- tomcat启动命令行窗口出现乱码的解决方法
- Java Script 之 Promise
- keil5建立多文件的时候为什么总是出错
- 卡尔曼滤波器(Kalman Filter) 理解
- 牛客小白月赛18-记录
- 2021年合肥学院校程序设计竞赛 --H.简单的桌游问题
- 所经历的大文件数据导出(后台执行,自动生成)
- FastDFS安装脚本
- Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法
- 剑指 Offer II 024. 反转链表
- Javascript中call()和apply()的用法 ----1
- 移动互联网赌博的大礼包触发
- IE浏览器异常,无法正常使用,如何修复?
- React子组件给父组件传值
- html如何绘制树结构图,HTML 5 Canvas 递归画树
- 直下式LED背光源和侧入式LED背光源的区别以及哪个好呢
- RFID 有源,半源和无源的区别
- 未来软件开发的发展趋势
热门文章
- android 缩放透明动画,Android旋转、平移、缩放和透明度渐变的补间动画
- 有序链表转换二叉搜索树Python解法
- 列表子集Python解法
- 幼儿园带括号算式口诀_这么全的小学数学速算技巧、口诀不多见,教给孩子挺不错!...
- vue a-sub-menu 添加点击事件报错_Vue+TS 使用的问题(持续更)
- android queue用法,GitHub - rygz146/TQueue: Android 可以任意切换线程的任务队列, TQueue
- easyexcel 无模板写入_给位,问个问题,用easyExcel无模板导出数据时,怎么在指定单元格添加计算公式呢?...
- 数据库开发技术java方向_Java开发工程师(Web方向) - 03.数据库开发 - 第5章.MyBatis...
- 现在的python版本_现在python 流行哪个版本
- mysql 1005_MYSQL使用错误 MYSQL中ERROR 1005