import java.util.concurrent.CompletableFuture;
public class CompletableFutureExceptionHandling {
public static void main(String[] args) {
CompletableFuture.supplyAsync(() -> {
// 模拟可能抛出异常的计算任务
int result = 10 / 0; // 这里会抛出算术异常
return result;
})
.thenAcceptAsync(result -> {
System.out.println("计算结果: " + result);
})
.exceptionally(ex -> {
if (ex instanceof ArithmeticException) {
System.out.println("捕获到算术异常: " + ex.getMessage());
return "很抱歉,发生了算术错误,请检查输入。";
} else if (ex instanceof NullPointerException) {
System.out.println("捕获到空指针异常: " + ex.getMessage());
return "很抱歉,发生了空指针错误,请检查相关对象是否为空。";
} else {
System.out.println("捕获到其他异常: " + ex.getMessage());
return "很抱歉,发生了未知错误,请联系管理员。";
}
})
.thenAccept(System.out::println);
}
}
异常区分处理思路
- 算术异常(ArithmeticException):通常是由于数学运算错误导致,如除数为零。在处理这类异常时,返回提示用户检查输入的友好错误信息,因为这类异常往往与输入数据有关。
- 空指针异常(NullPointerException):这通常是因为代码尝试访问空对象的属性或方法。处理这类异常时,提示用户检查相关对象是否为空,引导用户关注代码中对象的初始化和赋值情况。
- 其他异常:对于其他类型的异常,由于无法确切知道异常产生的原因,返回通用的让用户联系管理员的友好错误信息,以便进一步排查问题。通过这种方式,能针对不同类型异常给调用者提供更有针对性的错误提示,帮助其更快定位和解决问题。