内容纲要
443讲异常处理入门,try-catch-finally,throws,五大运行异常,异常处理机制、自定义异常
- 异常体系图
运行时异常
- 空指针异常NullPointerException
- 数学运算异常
- 数组越界异常 ArrayIndexOutOfBounds异常。
- 类型转换异常 ClassCastException
- 数字格式不正常异常 NumberFormatException
编译异常
- 练习
异常处理机制
- JVM处理异常简单暴力,直接输出异常,然后退出程序。
- try-catch异常处理
try{}catch{}finally{}
-
try-catch异常细节
快捷键 ctrl + Alt + T
-
如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块
-
如果异常没有发生,则顺序执行try的代码块,不会进入到catch
-
如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)
则使用如下代码 - finally
-
可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception 在后,NullPointerException 在前),如果发生异常,只会匹配到一个catch
- 可以进行 try-finally 配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉。
课堂练习
String 默认值时null; 上面代码会报NullPointerException空指针异常。
-
练习题3 细节-->注意catch中的return不会先返回,
而是i = 3;保存临时变量temp = 3;然后执行finally因为finally也没有返回,所以会先输出i = 4后返回3。
- 练习题
package com.Liao_;
import java.util.Scanner;
public class Test02 {
//如果用户输入的不是整数,那么就一直提示他输入,直到输入整数为止。
//使用异常处理机制
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
String inputStr = "";//用String接收用户输入最合适不过,因为要String强转int
do {
System.out.println("请输入:");
inputStr = myScanner.next();
try {
//String类型强制类型转换,如果出现异常就捕获
int num = Integer.parseInt(inputStr);
} catch (NumberFormatException e) {
System.out.println(e.getCause());
continue;//如果出现异常就直接进入下一循环
}
System.out.println("输入的是整数:" + inputStr);
return;//用break;也行
}while(true);//无限循环
}
}
throws异常处理
其中FileNotFoundException也可以换成它的父类Exception。
throws注意事项和使用细节
a.当一个方法调用另外一个方法时,另外一个方法若是抛出编译异常,则这个方法必须处理这个编译异常。
b.
自定义异常
- 应用实例
- 一般情况下,我们自定义异常是继承 RuntimeException
- 即把自定义异常做成 运行时异常,好处是,我们可以使用默认处理机制。(即方便。)