JAVA语法之异常以及异常处理
目录
一、异常是什么
二、异常的分类
三、为什么要处理异常
四、怎么处理异常
五、自定义异常
一、异常是什么
阻止当前方法或作用域,就是异常。
通俗的说,异常就是使得程序正常流程中断的事件。
比如当我们试图打开某个文件,就可能存在异常,文件损坏,文件不存在等等。
二、异常的分类
异常都继承于Throwable类。这个类主要由两个子类构成,一个是Error类,一个是Exception类。所以我们可以将异常分为以上两类。
异常也可以分为:可查异常、运行时异常、错误。共三种,其中运行时异常和错误统称为非可查异常。
这里采用第二种分类简单介绍一下。
(1) 可查异常
可查异常必须处理掉,如果不处理,编译器不会让通过。
可以使用try catch,也可以抛出去。
(2) 运行时异常
运行时异常并不一定要try catch。常见的有算术异常,空指针异常,数组下标越界异常等。
之所以会有运行时异常,可以这么理解。这些异常都非常普遍,如果都需要进行捕捉的话,那代码的可读性就会变得特别差。因而JAVA中设计了运行时异常。
(3) 错误
错误Error是系统级异常,通常是内存用光了。
在默认设置下,在一般java程序启动的时候,最大可以使用16m的内存
如果不停的给StringBuffer追加字符,很快就把内存使用光了。抛出OutOfMemoryError错误。
与运行时异常一样,错误也是不要求强制捕捉的。
三、为什么要处理异常
目的主要有三个:向用户通告错误;保存所有的工作结果;允许用户以妥善的形式退出程序。
正确的处理异常,可以将异常提示给编程人员或者用户,使得中断了的程序以适当的方式继续运行,并保存用户的当前操作,抑或进行数据回滚,同时将占用的资源进行释放。
四、怎么处理异常
1、 使用try catch语句
第一种,使用已知的异常类型去捕捉
第二种,使用异常的父类去进行捕捉
当然,也可以使用Throwable进行捕捉,这是因为Throwable是所有异常的父类。
补充说明:两种多异常的捕捉方法,但要注意的是第二种从JDK7开始支持。
注:下图代码省略了包名,因而是从第三行开始。
2、 使用try catch finally语句
与try catch语句不同的地方在于,finally后的语句无论如何都会继续执行。
3、 使用throw和throws
throws与throw这两个关键字接近,但意义不一样,先说说他们的区别:
1. throws 出现在方法声明上,而throw通常都出现在方法体内。
2. throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某个异常对象。
使用throws表示抛出异常,例如下图中,如果除数为0的时候,抛出异常。要么在后面加上try catch语句进行捕捉并处理,要么使用throws将异常抛给更上一级去处理。这种异常之间存在关系情况也叫做异常链。
使用try catch
使用throws声明抛出异常:
关于throws的使用:
下图代码的情况是这样:
主方法调用method1
method1调用method2
method2中打开文件
那么method2中需要进行异常处理。但是method2不打算处理,而是把这个异常通过throws抛出去,那么method1就会接到该异常。
处理办法也是两种,要么是try catch处理掉,要么也是抛出去。
method1选择本地try catch住 一旦trycatch住了,就相当于把这个异常消化掉了,主方法在调用method1的时候,就不需要进行异常处理了
五、自定义异常
当我们认为的异常并非是已知的异常的时候,我们可能就需要自定义一个异常。比如下图中定义的喝醉异常。
自定义异常的定义方法跟创建一个类的方法相类似。
提供了两种构造方法。
1. 无参的构造方法
2. 带参的构造方法,并调用父类的对应的构造方法
自定义异常的处理和前面的异常相同。使用try catch或者抛出。