【java读书笔记】——java的异常处理
程序在实际环境的执行过程中。安全成为须要首先考虑的重要因素之中的一个。这也是用户和程序猿最关心的问题。同一时候,Java语言健壮性也体如今了可以及时有效地处理程序中的错误。准确的说是Java的异常处理机制为解决安全问题提交了一份惬意的答卷。
先从总体上看一下本文要介绍的内容,然后进行具体的分析:
1、异常的概念
异常又称为例外,是特殊的执行错误对象,相应着Java语言特定的执行错误处理机制。
上面的概念是书本上说的。以下我谈一下自己的看法
事实上异常处理机制提供了统一的机制来识别和响应程序错误。异常能够为我们解答3W(what、where、why)问题提供帮助。
①what
假设异常机制使用恰当,被抛出异常的类型能够表明发生了什么程序错误。
②where
发生异常之后,而Stack Trace能够清楚的告诉我们什么地方发生了错误。
③why
为什么错误发生则能够通过看异常信息和Stack Trace来分析。
假设你的异常不能解决上面的3W问题。那么能够证明你对异常使用一定不对。
2、异常的分类
这张类图能够非常好的说明 Thorwable类是全部异常和错误的超类,有两个子类Error和Exception,分别表示错误和异常。 当中异常类Exception又分为执行时异常(RuntimeException)和非执行时异常,以下将具体讲述这些异常之间的差别与联系:
1.Error与Exception
Error:称为错误。由Java虚拟机生成并抛出,包含动态链接失败、虚拟机错误等。程序对其不做处理,也能够说成不能够处理的异常。
Exception:全部异常类的父类,其子类相应了各种各种详细可能出现的异常事件,一般须要用户声明或捕获,也叫可处理的异常。
2.runtimeException与非执行时异常(其它异常)
runtimeException:一类特殊的异常,如被0除、数组下界超范围。其产生比較频繁。处理麻烦。假设声明或捕获将会对程序可读性和执行效率影响非常大。因此系统自己主动检測并将它们交给缺省的异常处理程序,这种异常能够处理也能够不处理。
非执行时异常:是RuntimeException以外的异常,类型上都属于Exception类及其子类,这类异常是必需要处理的异常,否则程序就不能编译通过。
3、异常的捕获和处理
异常的捕获和处理是不easy把握的事情,假设处理不当。不但会造成程序的可读性差,并且会导致系统的性能下降,甚至会造成难以发现的错误。异常处理涉及到五个keyword:try、catch、finally、throw、throws。以下我们一一介绍:
1、异常处理的基本的语法
try{
//程序代码
}catch(异常类型 异常的变量名){
//异常处理代码
}finally{
//异常发生,方法返回之前,总是要运行的代码
}
①try语句
1.try语句指定了一段代码,该段代码一次捕获并处理例外的范围。
2.在运行过程中,该段代码可能会产生并抛出异常,catch语句捕获并处理。
3.没有例外产生。全部的catch代码段都被忽略不运行。
②catch语句
1.catch语句是对异常进行处理的代码,每一个try能够有一个或多个catch语句。用于处理可能产生不同类型的异常对象。
2.在catch中声明的异常对象,封装了异常事件发生的信息,在catch语句块中能够使用这个对象的一些方法获得这些信息。
③finally
1.finally语句为异常处理提供了统一的出口,使得在控制流程转到程序的其它部分曾经,可以对程序的状态做统一的管理。
2.不管try语句是否抛出异常。finally语句都会被运行
3.finally语句能够释放资源如:关闭打开的文件、删除暂时文件等等。
④throw与throws
throw用来在方法体内抛出一个异常。throws用来在方法名后声明方法可能会抛出什么异常。
public static void test() throws Exception{
//抛出一个检查异常
throw new Exception("方法test中的Exception");
}
2、 异常处理的一般原则
1、 异常能处理就早处理,抛出不去还不能处理的就想法消化掉或者转换为RuntimeException处理。
由于对于一个应用系统来说,抛出大量异常是有问题的,应该从程序开发角度尽可能的控制异常发生的可能。
2、对于异常,先逮小异常再逮大的异常。
由于程序的运行跟人的正常思维是一样。直接捕获基类异常。处理异常变的毫无意义。
4、总结
一张图,对于异常机制更深刻的理解,才干更好的使用。五个keyword是技术的必备武器。你必须得懂。先逮小的,再逮大的,对于异常的处理原则要把握好。否则就是功归一篑。
【java读书笔记】——java的异常处理的更多相关文章
- Java读书笔记一(异常处理)
1.介绍 在开发过程中.都会遇到程序执行时的异常,比如逻辑错误.硬件故障等,本篇博客将会具体的介绍一下Java中的异常处理机制. 2.Try和Catch捕获异常 我们在处理异常过程中经经常使用到的就是 ...
- Thinking In Java读书笔记--对象导论
Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...
- head first java读书笔记
head first java读书笔记 1. 基本信息 页数:689 阅读起止日期:20170104-20170215 2. 标签 Java入门 3. 价值 8分 4. 主题 使用面向对象的思路介绍J ...
- think in java 读书笔记 3 —— 数据报
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 数据报基本知识 2 ...
- think in java 读书笔记 2 —— 套接字
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 套接字基本知识 2 ...
- think in java 读书笔记 1 ——移位
目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 在Think in Java中 ...
- 《深入了解java虚拟机》高效并发读书笔记——Java内存模型,线程,线程安全 与锁优化
<深入了解java虚拟机>高效并发读书笔记--Java内存模型,线程,线程安全 与锁优化 本文主要参考<深入了解java虚拟机>高效并发章节 关于锁升级,偏向锁,轻量级锁参考& ...
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- Java读书笔记1
Java逍遥游记读书笔记 前言 必须先来一句,这是入门级别,高手勿喷~ 写Android的时候总有一些语句不是很理解,其实大部分是Java的内容,所以想系统的学下Java. 这本书——<Java ...
随机推荐
- 【bzoj4269】再见Xor 高斯消元求线性基
题目描述 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 输入 第一行一个正整数N. 接下来一行N个非负整数. 输出 一行,包含两 ...
- Code Jam 2017 Round 1A Problem B. Ratatouille
传送门 分析 首先把包(package)的克数 $Q_{ij}$ 转化成区间 $[\lceil Q_{ij}/(1.1 r_i )\rceil, \lfloor Q_{ij}/(0.9 r_i)\rf ...
- P1023 税收与补贴问题 (模拟)
题目链接 Solution 比较恶心的模拟题(主要是难看懂题意其实) 题意戳这里 然后根据一些简单的数学常识,可以知道这是一个二次函数. 所以我们每次枚举一个值,然后判定政府给出的价格是否是顶点即可. ...
- touch event 存疑
1.原声js与借用jquery输出来的事件列表却不一样 function touchPlay(e) { e.preventDefault(); console.log(e); } var screen ...
- hdu 6118 度度熊的交易计划
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- spring mvc处理静态文件
现在流行REST开发风格,REST风格的URL 是不希望看到例如:*.do后缀的. <servlet-mapping> <servlet-name>cxy</servle ...
- LOJ#2302. 「NOI2017」整数
$n \leq 1000000$个操作:一,给$x$加上$a*2^b$:二,问$x$的某个二进制位$k$.$b,k \leq 30n$,$|a| \leq 1e9$. 30暴露了一切..可以把30个二 ...
- mysql利用sql脚本插入数据中文乱码
将其中的 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SE ...
- AC日记——[USACO09OCT]Bessie的体重问题Bessie's We… 洛谷 P2639
题目描述 Bessie像她的诸多姊妹一样,因为从Farmer John的草地吃了太多美味的草而长出了太多的赘肉.所以FJ将她置于一个及其严格的节食计划之中.她每天不能吃多过H (5 <= H & ...
- 在路上:安全公司“跨界”SD-WAN
编者按:本文是SDNLAB“企业+”特别报道之一.“企业+”是SDNLAB重点打造的栏目,汇聚信息行业运营商.设备商.互联网公司.软件公司.集成公司.融创投资公司.科研院所等企业,重新定义IT行业撮合 ...