异常。

1、什么是异常?

异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。

2、为什么学习异常?

学习异常的原因很简单,就是可以让有问题的程序继续正常的运行下去。

一句话总结什么是异常:

异常就是:程序在运行当中,所发生的不正常事件,会导致程序中断。

3、异常发生的原因有很多,通常包含以下几大类:

用户输入了非法数据。

要打开的文件不存在。

网络通信时连接中断。

4、异常的分类

(1)运行时异常

 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

(2)编译时异常(必须解决,否则无法执行)

最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

5、Exception类的层次。

所有的异常类是从java.lang.Exception类继承的子类。

Exception类是Throwable类的子类。除了Exception类外,Throwable还有一个子类Error 。

Java程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。

Error用来指示运行时环境发生的错误。

例如,JVM内存溢出。一般地,程序不会从错误中恢复。


异常。_第1张图片

6、Java 内置异常类。

Java 语言定义了一些异常类在java.lang标准包中。

标准运行时异常类的子类是最常见的异常类。由于java.lang包是默认加载到所有的Java程序的,所以大部分从运行时异常类继承而来的异常都可以直接使用。

Java根据各个类库也定义了一些其他的异常,下面的表中列出了Java的非检查性异常。

运行时异常:


异常。_第2张图片

编译时异常:


异常。_第3张图片

7、捕获异常

使用try和catch关键字可以捕获异常。try/catch代码块放在异常可能发生的地方。

try/catch代码块中的代码称为保护代码,使用 try/catch的语法如下:


异常。_第4张图片

Catch语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try后面的catch块就会被检查。

如果发生的异常包含在catch块中,异常会被传递到该catch块,这和传递一个参数到方法是一样。

8、多重捕获块


异常。_第5张图片

上面的代码段包含了3个catch块。

可以在try语句后面添加任意数量的catch块。

如果保护代码中发生异常,异常被抛给第一个catch块。

如果抛出异常的数据类型与ExceptionType1匹配,它在这里就

会被捕获。

如果不匹配,它会被传递给第二个catch块。

如此,直到异常被捕获或者通过所有的catch块。

9、throws/throw关键字。

1)如果一个方法没有捕获一个检查性异常,那么该方法必须使用throws 关键字来声明。throws关键字放在方法签名的尾部。

2)也可以使用throw关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

3)一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

10、finally关键字。


异常。_第6张图片

finally关键字用来创建在try代码块后面执行的代码块。

无论是否发生异常,finally代码块中的代码总会被执行。

在finally代码块中,可以运行清理类型等收尾善后性质的语句。

finally代码块出现在catch代码块最后。

注:catch不能独立于try存在。

        在try/catch后面添加finally块并非强制性要求的。

        try代码后不能既没catch块也没finally块。

        try, catch, finally块之间不能添加任何代码。

11、声明自定义异常。

在Java中你可以自定义异常。编写自己的异常类时需要记住下面的几点。

所有异常都必须是Throwable的子类。

如果希望写一个检查性异常类,则需要继承Exception类。

如果你想写一个运行时异常类,那么需要继承RuntimeException 类。

你可能感兴趣的:(异常。)