Java异常

来源:互联网 发布:只有淘宝网图片不显示 编辑:程序博客网 时间:2024/05/17 22:49

一.程序

所谓程序就是各种命令的集合


二.异常

异常就是在程序运行时发生的不正常的时间,打断程序运行的流程


目的:

学习异常就是为了能够利用异常做出良好的应用程序(所谓的良好的应用程序,就是不能因为异常,导致整个应用程序无法使用)


注意:Java本身就提供了处理异常的能力,学习异常就是学习如何利用这种能力,帮我们解决开发中异常的问题


【异常处理机制】

Java程序在执行过程中如果出现异常,会自动生成一个异常类对象,该异常类对象将被自动提交给JVM,这个过程称为抛出异常

当JVM接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获异常和处理异常,如果JVM找不到可以捕获异常的代码,则运行时系统将停止,相应的Java程序也将退出


三.异常的分类

1.根据严重程度

错误(Error):这个级别的异常代码是无能为力,必须通过手动方式解决        

 例如:JVM内部出错或CPU资源耗尽

异常:(Exception):一般指的是编程过程中出现的一般性问题

例如:除数为0,数组下标越界


注意:

Java程序员只能处理Exception,对Error无能为力


2.Exception根据编程划分:

受检异常:就是在编译期间就要处理的异常(javac)

非受检异常:在运行期间需要处理的异常(Java)


Java.lang.RuntimeException类以及子类都属于非受检异常


3.Error和Exception的共同父类是Throwable


四.try和catch

try{ …… }语句包含了一段代码,这段代码就是一次捕获并处理异常的范围。在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理

在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象

在catch中声明的异常对象(catch(ExceptionName e))封装了异常事件发生的信息,在catch语句块中可以使用这个对象的一些方法获取这些信息。例如:

getMessage()方法,用来获得有关异常事件的字符串信息

printStackTrace()方法,用来跟踪异常事件发生时执行堆栈的内容

使用多重catch语句时,异常子类一定要位于异常父类之前

如果没有异常产生,所有的catch段的代码都会被忽略不执行


五.finally

finally中的代码主要用来进行资源清理的工作

无论try语句块中是否有异常发生,位于finally中的代码都会被执行


六.throw和throws

throw关键字用在方法代码中主动产生一个异常


如果方法代码中自行抛出的异常是受检异常,则这个方法要用throws关键字声明这个异常


throws用来声明一个方法可能会抛出的所用异常。跟在方法签名的后面。如果一个方法声明的是受检异常,则在调用这个方法之处必须处置这个异常(谁调用处理)


显示捕获这个异常,继续用throws向上声明

注:重写一个方法时,它所声明的异常范围不能被扩大


七.自定义异常

自定义异常:当需要一些跟特定业务相关的异常信息类时,可以继承Exception来定义一个受检异常。也可以继承自RuntimeException或其子类来定义一个非受检异常


八.异常实践

观察抛出的异常的名字和行号跟重要

应该捕获和处理那些已知如何处理的异常,传递那些不知如何处理的异常

尽量减少try语句块的体积

for(int i=1;i<=1000;i++){

try{

}catch(…)

}不合理

尽量减少try-catch语句的嵌套


在catch块代码段中,应该打印出该异常的堆栈跟踪信息以方便调试


九.【JDK 7新增的特性】


在Java 7以前,每个catch块中只能捕捉一个异常。从Java 7开始,一个catch块可以捕捉多个异常。

语法:

catch(异常1 | 异常2 | 异常3  ex)

{

}多个异常之间用竖线隔开


0 0
原创粉丝点击