1、try、catch、finally、throw、throws
2、try块有return的情况下,finally中的代码也会被执行(先执行finally,再执行return),但是System.exit(0)是终止当前的虚拟机执行,即立即停止程序,这时finally中的代码就不会被执行了
3、哪些代码会放在finally?关闭DB资源、关闭IO流资源、关闭socket资源
4、常见异常:InputMismatchException、ArithmeticException、IllegalArgumentException、NumberFormatException、NullPointerException、RuntimeException、ArrayIndexOutOfBoundsException、ClassNotFoundException、InstantiationException、IllegalAccessException
5、多个catch的情况,将特殊异常放在前面,先子类异常、后父类异常,并列异常可以加|进行串接(JDK1.7之后)
6、异常的分类
**前提:程序中语法错误、逻辑错误,都不属于错误、异常
(1)运行时异常
写代码时不用特意对异常进行处理,在程序运行以后,系统自动检测,然后报出异常
例如:NullPointerException、ArrayIndexOutOfBoundsException
(2)检查异常
在程序运行之前,检测到可能出现异常,使用try/catch块包裹,提前给出解决方案,防患于未然
例如:ClassNotFoundException、InstantiationException、IllegalAccessException
7、throw和throws的区别
(1)位置不同
throw写在方法内部,throws写在方法的签名处、方法的声明处
(2)内容不同
throw+异常对象(检查异常、运行时异常),throws+异常类型(可以多个类型,用,拼接)
(3)作用不同
throw异常出现的源头,制造异常,throws在方法的声明处,告诉方法的调用者,这个方法中可能会出现我声明的这些异常,然后调用者对这个异常进行处理,要么自己处理,要么再继续向外抛出异常
**
package yes.javase.oop.javase_220304_exception_test3;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
try {
System.out.println(devide());
} catch (Exception e) {
e.printStackTrace();
}
;
}
public static int devide() throws Exception {
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
int num2 = sc.nextInt();
int dev;
if (num2 == 0){
//制造运行时异常
// throw new RuntimeException();
//制造检查时异常-内部解决
// try {
// throw new Exception();
// } catch (Exception e) {
// e.printStackTrace();
// }
//制造检查时异常-抛出异常
throw new Exception();
}else {
dev = num1/num2;
}
return dev;
}
}