异常处理
- 异常处理又叫例外处理。对程序进行异常处理有两个目的,一是发现程序中出现的异常,二是对出现的异常进行相对操作或通知程序员进行修改;
基本语法:
try{
可能出现异常的代码
}catch(异常类型1 引用){
//异常类型1的处理代码
}
//应用
public class Test2{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
try {
System.out.println(a/b);
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 处理多个异常,也就是一个try多个catch,需要注意的是当try语句块中的代码出现一个异常后,不管后面的代码是否发生异常都不会再继续运行,而是直接查找是否有相对应异常的catch语句。如果有相对应的就执行该catch语句中的内容,如果没有,就会直接将该异常输出。
public class Test2 {
public void method() {// 定义被调用的方法
System.out.println("调用类中的方法");
}
public static void main(String[] args) {
// TryCatchTest3 tct=null; //创建空引用
Test2 tct = null;
int[] is = new int[3];
try {// 将可能发生异常的代码包含在此语句中
tct.method(); // 使用空引用调用方法
is[3] = 5;
} catch (NullPointerException e) {// 判断代码是否发生空指针异常
System.out.println("发生空指针异常");
} catch (ArrayIndexOutOfBoundsException e) {// 判断是否发生数组越界异常
System.out.println("发生数组越界异常");
}
}
}
——————————————————————————————————————
finally语句
- finally语句的使用是无论前面的代码是否发生异常,都会执行finally语句中的内容,一个异常处理语句中没有或者只能最多有一个finally语句。
- 例如数据库操作中,连接数据库时连接成功和失败都是有可能的,但是无论是否成功最后都是要关闭该连接的。关闭连接的代码语句就可以放在finally语句中。
————————————————————
try-catch-finally语句
- try-catch-finally语句中 catch可以没有:try-finally;或者可以没有finally:try—catch;但是finally语句和catch语句不能同时省略,省略的异常处理是没有任何意义的。
- 当try-catch异常处理语句中具有多个catch语句时,必须将子类异常放在前面,将父类异常放在后面。也可以说将范围小的异常放在前面,将范围大的异常放在后面。
- 例如Exception是所有异常的父类,而算术异常只对特定异常处理,所以必须将算术异常放在前面,将Exception异常放在后面。
————————————————————
Error
Error类主要用于表示程序中致命错误,例如内存不足等严重错误,一般与硬件相关。不需要对这种错误进行处理。
————————————————————
throw关键字
- 异常的抛出throw,可分为两大类
(1)由系统自动抛出
(2)通过throw关键字将异常对象显示抛出
- 显示抛出异常从某种程度上实现了将处理异常的代码从正常流程代码中分离开了,使得程序的主线保证相对完整,同时增加了程序的可读性和可维护性。异常沿着调用层次上抛出,交由调用它的方法来处理。
异常抛出的语法:
throw new 异常类();
其中异常类必须是throwable类和其子类
- 如果一个方法可以导致一个异常但不处理它,它必须指定这种行为以使方法的调用者可以保护它们自己而不发生异常。要做到这点可以在方法声明中包含一个throws子句。throws总是出现在一个方法头中,用来标明该成员方法可能抛出的各种异常。
public class Test2 {
public void method() throws RuntimeException {
try {
int[] is = new int[3]; // 定义一个数组长度为3的数组
is[3] = 5; // 设置索引为3的数组元素
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("发生数组越界异常");
throw e; // 显性抛出捕获到的异常
}
}
public static void main(String[] args) {
Test2 tt = new Test2();
try {
tt.method(); // 调用方法
} catch (RuntimeException e) {// 对方法中抛出的异常进行处理
System.out.println("对异常再处理");
}
}
}
————————————————————
error和exception区别
error解决不了的错误,一般是JVM内存错误
exception表示可以捕捉、预测的异常
运行时异常(Runtime)与检查异常(Checked)异同
运行时异常为编程时的异常
检查异常某处执行时可能因为条件不足而出现异常,程序必须对此进行处理,JVM会提示编程人员捕获或重新抛出异常
Java语言进行异常处理
异常是指java程序运行时(非编译)所发生的非正常情况或错误。
Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象中,该对象中包含有异常的信息。
——————————————————————————————————————
笔记内容来源:大坏蛋^_^的博客_CSDN博客-Java基础,Linux,SpringBoot+领域博主



