JAVA语言-异常
黄泽民 2018-04-03 来源 : 阅读 333 评论 0

摘要:,JAVA语言离不开异常,异常机制已经成为判断一门编程语言是否成熟的标准,除了传统的像C语言没有提供异常机制之外,目前主流的编程语言如Java、C#、Ruby、Python等都提供了成熟的异常机制。异常机制可以使程序中的异常处理代码和正常业务代码分离,保证代码更加优雅,并可以提高程序的健壮性。解决这个,我们对JAVA语言的理解将会更加深刻

异常机制已经成为判断一门编程语言是否成熟的标准,除了传统的像C语言没有提供异常机制之外,目前主流的编程语言如Java、C#、Ruby、Python等都提供了成熟的异常机制。异常机制可以使程序中的异常处理代码和正常业务代码分离,保证代码更加优雅,并可以提高程序的健壮性。

异常的概念

l 异常:中断了正常指令流的事件。

l 异常允许我们去强制程序停止运行并报告错误,或者(理想状态下)强制程序处理问题并返回稳定状态。

异常的分类

 JAVA语言-异常

 JAVA语言-异常

异常处理机制

l 捕获异常:try-catch-finally

Ø try:监控区域,执行产生异常的代码

Ø catch:捕获、处理异常

Ø finally:善后处理,无论是否发生异常,代码总能执行

l 语法结构

 JAVA语言-异常

PS:不管程序代码块是否处于try代码块中,甚至包括catch代码块中的代码,只要执行该代码块时出现了异常,系统总会自动生成一个异常对象。如果程序么有为这段代码定义任何的catch块,则Java运行时环境无法找到处理该异常的catch代码块,程序就在此退出。

l 先处理小异常,再处理大异常

Java 7 提供的多异常捕获

在Java 7以前,每个catch代码块只能捕获一种类型的异常,但是从Java 7开始,一个catch代码块可以捕获多种类型的异常。

l 使用一个catch代码块捕获多种类型的异常时需要注意以下两个地方:

Ø 多种异常类型之间用竖线“|”隔开

Ø 异常变量有隐式的final修饰,因此程序不能对异常变量重新赋值

访问异常信息

l 所有的异常对象都包含了以下几个常用方法:

Ø getMessage():返回该异常的详细描述字符串

Ø printStackTrace():将该异常的跟踪栈信息输出到标准错误输出

Ø printStackTrace(PrintStream  s):将该异常的跟踪栈信息输出到指定输出流

Ø getStackTrace():返回该异常的跟踪栈信息

使用finally回收资源

有些时候,程序在try代码块里打开了一些物理资源(例如数据库连接、网络连接和磁盘文件等),这些物理资源都必须显示回收。

PS:Java的垃圾回收机制不会回收任何物理资源,垃圾回收机制只能回收堆内存中对象所占用的内存。

异常处理机制提供了finally代码块来保证一定能回收try代码块中打开的物理资源。不管try代码块中的代码是否出现异常,也不管是哪一个catch代码块被执行,甚至在try代码块或catch代码块中执行了return语句,finally代码块总会被执行。

l 对于异常处理语法结构需要注意以下几点:

Ø try代码块必须出现

Ø catch和finally代码块是可选的,但是必须出现一个

Ø 可以多个catch代码块

Ø catch代码块必须位于try代码块之后,finally代码块必须位于所有的catch代码块之后

Ø 尽量避免在finally代码块里使用return或throw等导致方法终止的语句,否则可能会出现一些很奇怪的情况

异常处理的嵌套

异常处理流程代码可以放在任何能放可执行代码的地方,因此完整的异常处理语句既可以放在try代码块里,也可以放在finally代码块里。

异常处理嵌套的深度没有很明确的限制,但通常没有必要使用超过两层的嵌套异常处理,层次太深的嵌套没有太大必要,而且会导致程序的可读性降低。

处理异常的另一种方式:抛出异常

l 使用throws声明抛出异常

使用throws声明抛出异常时有一个限制,就是子类方法声明抛出的异常类型应该是父类方法声明抛出的异常类型的子类或相同,子类方法声明抛出的异常不允许比父类方法声明抛出的异常多。

使用throw抛出异常

当程序出现错误时,系统会自动抛出异常,除此之外,Java也允许程序自行抛出异常,自行抛出异常使用throw语句来完成

自定义异常类

l 自定义异常必须从已有的异常类继承

l 建立新的异常类型最简单的方法就是让编译器默认构造方法,也可以为异常类定义一个接受字符串参数的构造方法,字符串参数用来描述异常信息。

catch和throw同时使用

 JAVA语言-异常

这种catch和throw结合使用的情况在大型企业级应用中非常常用。

l 企业级应用对于异常的处理通常有两种需求:

1. 应用后台需要通过日志来记录异常发生的详细情况

2. 应用需要根据异常向应用使用者传达某种提示

Java7增强的throw语句

 JAVA语言-异常

以上代码用JDK7以前的版本编译,是编译不通过的。

异常处理规则

我们已经学习了异常的相关知识,但是在开发过程中,还有一些细节的地方需要注意,使用异常处理机制时还需要尽量满足以下规范:

l 不要过度使用异常

过度使用异常主要有两个方面:

1. 把异常和普通错误混淆在一起,不再编写任何错误处理代码,而是以简单的抛出异常来代替所有的错误处理

2. 使用异常处理来代替流程控制

l 不要使用过于庞大的try代码块

当try代码块过于庞大时,难免需要写上大量的catch代码块来针对不同的异常提供不同处理逻辑。同一个try代码块紧跟大量的catch代码块就需要分析它们之间的逻辑关系,反而增加了编程的辅助度,降低了可读性。

正确的做法是把大块的try代码块分割成多个可能出现异常的程序段落,并把他么放在单独的try代码块中,从而分别捕获并处理异常。

l 避免使用catch All语句

l 不要忽略捕获到的异常

希望这篇文章可以帮助到你,总之同学们,it资讯尽在职坐标。

本文由 @职坐标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论
本文作者 联系TA

擅长javase核心技术

  • 11
    文章
  • 1238
    人气
  • 83%
    受欢迎度

已有6人表明态度,83%喜欢该老师!

进入TA的空间
名师指导直通车
  • 资料索取
    资料索取
  • 答疑解惑
    答疑解惑
  • 技术交流
    技术交流
  • 职业测评
    职业测评
  • 面试技巧
    面试技巧
  • 高薪秘笈
    高薪秘笈
TA的其他文章 更多>>
​JAVA从入门到精通-八大排序总结
经验技巧 0% 的用户喜欢
JAVA从入门到精通-变量和数据类型
经验技巧 0% 的用户喜欢
JAVA从入门到精通-内部类、自动拆装箱、枚举
经验技巧 0% 的用户喜欢
JAVA从入门到精通-泛型
经验技巧 0% 的用户喜欢
JAVA语言-线程
经验技巧 0% 的用户喜欢
其他海同名师 更多>>
刘新华
刘新华 联系TA
实力型。激情饱满,对专业充满热情
吴翠红
吴翠红 联系TA
独创“教、学、练、测”循环教学模式
吕益平
吕益平 联系TA
熟悉企业软件开发的产品设计及开发
程钢
程钢 联系TA
擅长大型企业商业网站开发和管理
孔庆琦
孔庆琦 联系TA
对MVC模式和三层架构有深入的研究
经验技巧30天热搜词 更多>>

您输入的评论内容中包含违禁敏感词

我知道了

X
免费获取海同IT培训资料
验证码手机号,获得海同独家IT培训资料
获取验证码
提交

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    ICP许可  沪B2-20190160

站长统计