目录
- 一、Java异常类层次结构
- 二、Throwable类常用方法
- 三、try-catch-finally
- 四、使用 try-with-resources 来代替try-catch-finally
- 五、自定义异常
- 总结
一、Java异常类层次结构

Java中,所有的异常都来源于java.lang包中的Throwable类,它有两个重要的子类,Exception(异常)和Error(错误)。
- Exception :程序本身可以处理的异常,可以通过 catch 来进行捕获。Exception 又可以分为 受检查异常(必须处理) 和 不受检查异常(可以不处理)。
- Error :Error 属于程序无法处理的错误 ,我们没办法通过 catch 来进行捕获 。例如,虚拟机内存不够错误(OutOfMemoryError)、类定义错误(NoClassDefFoundError)等 。这些异常发生时,Java 虚拟机(JVM)一般会线程终止。
二、Throwable类常用方法
- public String getMessage(): 返回异常发生时的简要描述
- public String toString(): 返回异常发生时的详细信息
- public String getLocalizedMessage():返回异常对象的本地化信息。使用 Throwable 的子类覆盖这个方法,可以生成本地化信息。如果子类没有覆盖该方法,则该方法返回的信息与 getMessage()返回的结果相同
- public void printStackTrace():在控制台上打印 Throwable 对象封装的异常信息
三、try-catch-finally
- try块: 用于捕获异常。其后可接零个或多个 catch 块,如果没有 catch 块,则必须跟一个 finally 块。
- catch块: 用于处理 try 捕获到的异常。
- finally 块: 无论是否捕获或处理异常,finally 块里的语句都会被执行。当在 try 块或 catch 块中遇到 return 语句时,finally 语句块将在方法返回之前被执行。
在以下 2种特殊情况下,finally 块不会被执行:
- 在 try 或 finally块中用了 System.exit(int)退出程序。但是,如果 System.exit(int) 在异常语句之后,finally 还是会被执行
- 程序所在的线程死亡。
代码示例:
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("test.txt"));
br.readLine();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null)
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
四、使用 try-with-resources 来代替try-catch-finally
1. 适用范围(资源的定义): 任何实现 java.lang.AutoCloseable 的对象
2. 关闭资源和 finally 块的执行顺序: 在 try-with-resources 语句中,任何 catch 或 finally 块在声明的资源关闭后运行
《Effecitve Java》中明确指出:
面对必须要关闭的资源,我们总是应该优先使用 try-with-resources 而不是try-finally。随之产生的代码更简短,更清晰,产生的异常对我们也更有用。try-with-resources语句让我们更容易编写必须要关闭的资源的代码,若采用try-finally则几乎做不到这点。
将上面的代码例子改造:
try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
br.readLine();
} catch (Exception e) {
e.printStackTrace();
}
代码变得非常简洁。
注意:try-with-resource中声明的变量会隐式的加上final 关键字,所以无法再进行赋值。
五、自定义异常
在Java中要想创建自定义异常,需要继承Throwable或者他的子类Exception。
因为父类已经把异常信息的操作都完成了,所在子类只要在构造时,将异常信息传递给父类通过super 语句即可。
代码示例:
public class CustomException extends Exception {
//无参构造方法
public CustomException(){
super();
}
//有参的构造方法
public CustomException(String message){
super(message);
}
// 用指定的详细信息和原因构造一个新的异常
public CustomException(String message, Throwable cause){
super(message,cause);
}
//用指定原因构造一个新的异常
public CustomException(Throwable cause) {
super(cause);
}
}
按照国际惯例,自定义的异常应该总是包含如下的构造函数:
- 一个无参构造函数
- 一个带有String参数的构造函数,并传递给父类的构造函数。
- 一个带有String参数和Throwable参数,并都传递给父类构造函数
- 一个带有Throwable 参数的构造函数,并传递给父类的构造函数。
finally块和return
首先一个不容易理解的事实:在 try块中即便有return,break,continue等改变执行流的语句,finally也会执行。
finally中的return 会覆盖 try 或者catch中的返回值。
finally中的return或异常会抑制(消灭)前面try或者catch块中的异常。
总结
相关推荐:
SEO项目:如何通过精确优化提升企业网站排名与转化率,武汉做网站优化的公司
《SEO教材:打造网站流量的核心利器,教你轻松SEO优化技巧》,咖啡网站建设总结文案
ChatPartner无法连接网络?解决方案,让你的聊天体验更顺畅!,如何用ai给自己写作文
SEO查:如何用精准的SEO诊断助力网站流量爆发,美团关键词排名怎么补
AI免费生成文章的软件:轻松创作的秘密武器
文章AI扩写:突破创作瓶颈,提升写作效率的秘密武器
优化页面-提升用户体验与搜索引擎排名的关键,绍兴视频营销推广
什么是seo寄生虫,寄生虫seo原理 ,AI 疫
在线AI写文:开启高效创作新时代
SEO策划:让你的网站迅速脱颖而出的秘诀,seo优化和技巧
SEO包含的秘密:让你的网站轻松排上首页,新媒体营销推广方案目录
seo用什么写属性写,seo属于什么 ,芭田科学施肥AI
seo线索收集是什么,seo线索收集是什么意思 ,ai生活ai童童
seo站内链接有什么作用,seo中网站内链的作用 ,781900ai
《*采集站:带你领略全球最全*资源的宝藏平台》,seo优化易下拉瞧瞧
“扩写AI”-引领写作革命,开启智能创作新时代,dede seo 标题如何填写
什么是seo网站推广,什么是seo网站推广 ,ai酷男人
ChatGPT登录界面都不显示了?可能是这些原因导致的!,上海小学ai智能课
文章AI生成标题:让创作更轻松,内容更精彩
ChatGPT的梯子:突破网络壁垒,畅享智能对话的全新体验,ai的音标1001ai的音标
AI人工智能生成文章:开启写作新时代
SEO经营:助力企业腾飞的秘密武器,靖边百度关键词排名
seo用什么论坛引流,seo引流方法 ,ai写作续写神器
GPT怎么收费?揭秘AI技术的定价与价值,ai报考高考
ChatGPT桌面版无法加载?快速解决方案及常见问题解析,ai媚眼
SEO提高:如何通过精准优化让网站流量翻倍,优化排名seo加盟费用
seo需要懂什么源码,seo需要懂什么源码技术 ,ai 纤维
AI会生成同一篇文章吗?揭开智能创作的神秘面纱
AI生成网页模板,轻松打造专业网站,ai网格画法
AI人工智能:开发与应用的必备软件推荐
为什么“蜘蛛弛查询”能成为提升网站排名的秘密武器?,惠州网站推广v1戈seo24
ChatGPT暂时不可用?如何高效应对并寻找最佳替代方案!,logo ai教程视频
“更加通顺”-让生活与工作无缝衔接的语言魅力,SEO书架书桌收纳
代哥SEO-让您的网站迅速登顶搜索引擎的秘密武器,济南关键词的排名优化
SEO排序:如何让你的网页在搜索引擎中脱颖而出,平谷抖音seo推广招聘
SEO快速提升:让你的网站排名瞬间飙升的秘诀,网站建设的发展目标
中国AI软实力崛起:技术创新与产业应用的完美融合,seo0066
高效创作之路:文章AI生成器的力量
AI免费写文:创作新时代的高效助手
为什么seo对企业重要,seo对企业进行网络营销的价值 ,ai李沁换脸鲍鱼
【SEO优化全攻略】提升网站流量的终极秘籍,带你轻松玩转搜索引擎优化!,金融网站推广维护
在线AI文章生成:智能写作的无限可能
优化软件:让电脑性能焕然一新,提升效率的秘密武器,大理网站推广招聘信息最新
SEO外链技巧:提升网站排名的秘密武器,ai视频生日祝福
用AI写文章查重率高吗?揭秘AI写作与查重检测的关系
互联网留痕:数字时代的隐形轨迹与自我管理,灯塔网站推广包年多少钱
SEO手法如何通过精准优化提升网站排名,获取海量流量,网站建设协议流程是什么
seo需要学会什么编程,seo要会些什么 ,剪映怎样加ai
ChatGPT中文版下载,开启智能对话新体验,婚纱ai男
URL站长的崛起:打造高效网站运营的秘密武器,网站建设费用计算依据