错误
IOException、SQLException等。RuntimeException及其子类。异常处理机制
Java提供了五个关键字来处理异常:try、catch、finally、throw和throws。
new 异常类
基本异常处理代码 public static void test1() { try { int result = 1 / 0; } catch (ArithmeticException e) { System.err.println("捕获到除数为0的异常:" + e.getMessage()); } finally { System.out.println("finally"); } }
抛出异常
复制代码public static void divide(int dividend, int divisor) throws ArithmeticException {
if (divisor == 0) {
throw new ArithmeticException("除数不能为0");
}
System.out.println(dividend / divisor);
}
总结:当抛出一个被检查的异常,我们必须使用try-catch块来处理它,或者在方法声明中使用throws子句继续往外抛
简介:Java内置异常体系分类和核心方法讲解
Throwable类
OutOfMemoryError(内存溢出错误)等。Exception类又可以分为运行时异常(RuntimeException)和非运行时异常(即编译时异常或已检查异常)。Throwable类(定义了一些用于处理错误和异常的核心方法)
运行时异常,不可查异常(RuntimeException子类)
throws关键字来声明这个方法会抛出这些异常NullPointerException:当应用程序试图在需要对象的地方使用null时抛出。ClassCastException 强制失败抛出异常ArrayIndexOutOfBoundsException:当应用程序试图访问数组的非法索引时抛出。ArithmeticException:当出现异常的算术运算条件时抛出,例如除以零。非运行时异常,可查异常(编译时异常或已检查异常,必须要在方法里面捕获或者抛出)
throws关键字来声明这个方法会抛出这些异常。throws关键字再次声明这些方法也可能会抛出这些异常。ClassNoFoundException 应用程序试图加载类,找不到对应的类IllegalAccessException 拒绝访问一个类的时候NoSuchFieldExcetion 请求的变量不存在NoSuchMethodException 方法不存在IOException:当发生输入/输出错误时抛出。SQLException:当使用JDBC(Java Database Connectivity)与数据库交互时,发生SQL错误或数据库访问错误时抛出。异常处理之多重捕获
多重捕获(Multiple Catch)是Java异常处理中的一个重要概念,它允许在单个try块后面跟随多个catch块,
捕获不同类型的异常,这种机制使得代码更加清晰和易于管理,特别是在处理多种可能的异常时。
语法
try代码块后面可以跟随多个catch代码块,每个catch代码块用于捕获并处理不同类型的异常。catch代码块的顺序很重要。Java会按照catch代码块的顺序进行匹配,将更具体的异常类型放在前面try/catch后面添加finally块是可选的,无论是否发生异常,finally代码块的代码总会被执行。finally块通常用于执行清理操作,如关闭文件或数据库连接。例: public class MultipleCatchExample { public static void main(String[] args) { try { divide(1, 0); } catch (ArithmeticException e) { System.out.println("算数异常:" + e.getMessage()); } catch (NullPointerException e) { System.out.println("空指针异常" + e.getMessage()); } catch (Exception e) { System.out.println("其他类型的异常" + e.getMessage()); } finally { System.out.println("finally"); } }
复制代码 // 抛出异常
public static void divide(int dividend, int divisor) {
if (divisor == 0) {
throw new ArithmeticException("除数不能为0");
}
System.out.println(dividend / divisor);
}
}
什么是自定义异常
如何进行自定义异常
Exception或RuntimeException。例:
定义异常类 public class InvalidDataException extends RuntimeException { public InvalidDataException() { super(); }
复制代码 public InvalidDataException(String message) {
super(message);
}
public InvalidDataException(String message, Throwable cause) {
super(message, cause);
}
}
当检测到无效数据时,创建一个新的InvalidDataException实例并抛出它
public class DataProcessor {
public void processData(String data) throws InvalidDataException{
if (data == null) {
throw new InvalidDataException("Invalid data:" + data);
}
System.out.println(data);
}
}
调用processData方法的代码中使用try-catch块来处理
public class CustomExceptionDemo {
public static void main(String[] args) {
DataProcessor dataProcessor = new DataProcessor();
try {
dataProcessor.processData(null);
} catch (InvalidDataException e) {
e.printStackTrace();
}
}
}