1.为什么有JAVA异常机制
为了使程序中异常处理代码和正常业务代码分离,为了提高程序的健壮性、可维护性和用户体验。异常类型可以回答“什么”被抛出,异常堆栈跟踪可以回答“在哪”抛出,异常信息可以回答“为什么”会抛出。
2.异常的定义
异常是指程序执行过程中出现的不正常情况,它打断了程序的正常执行流程。在Java中,异常被当作对象来处理,这些对象都是Throwable类的实例或其子类的实例。
3.异常的分类
Java中的异常体系是基于Throwable类构建的,Throwable是所有异常和错误的超类,Throwable有两个主要的子类:Error和Exception。
3.1Error
Error类及其子类表示程序运行时JVM(Java虚拟机)遇到的严重问题,这些问题通常是不可恢复的,如内存溢出(OutOfMemoryError)、栈溢出(StackOverflowError)等。
3.2Exception
Exception可以分为两大类
(1)受检查异常(Checked Exceptions)
在编译时期就能够被捕捉到,编译器会强制要求开发者对这类异常进行处理。如IOException、ClassNotFoundException等。
(2)运行时异常(Runtime Exceptions)
在运行时期才能够被捕捉到,编译器不会强制要求开发者对这类异常进行处理。如NullPointerException(空指针)、ArrayIndexOutOfBoundsException(数组越界)、ClassCastException(类型转换)、ArithmeticException(算术异常)等。
4.使用异常机制
4.1抛出异常
在编写代码时,可能会遇到无法处理的错误情况(无效的用户输入、资源不可用、权限问题、状态不一致、复杂的错误条件等),此时可以通过throw关键字抛出异常,这可以是Java内置的异常类型,也可以是自定义的异常类。
public void doSomething() throws MyCustomException {
if (/* 某种错误条件 */) {
throw new MyCustomException("出错了!");
}
}
4.2捕获异常
使用try-catch语句块来捕获并处理可能抛出的异常。你可以捕获特定的异常类型,也可以捕获所有异常(使用catch (Exception e))。
try {
// 尝试执行的代码
doSomething();
} catch (MyCustomException e) {
// 处理MyCustomException
System.err.println("捕获到自定义异常: " + e.getMessage());
} catch (Exception e) {
// 处理其他可能的异常
e.printStackTrace();
}
4.3自定义异常
当Java内置的异常类型不满足开发需求时,可以通过继承Exception或RuntimeException来创建自定义异常类。
public class MyCustomException extends Exception {
public MyCustomException(String message) {
super(message);
}
}
参考:https://blog.csdn.net/qq_43061290/article/details/124078378