1、异常与错误
在程序运行过程中出现轻微问题不会使程序终止的叫做异常,程序员可以使用一些方法来处理这些问题。在运行过程中,有方法应对
在程序运行过程中出现巨大问题对程序进行终止的叫做错误,错误是无法捕获的,是无法处理的
2、异常类层级关系
Exception
和Error有共同的父类Throwable
3、Exception又可以分为检查性异常和非检查性异常
3.1、检查性异常
检查性异常(Checked Exceptions)是Java中一种特殊的异常类型,它们是编译时检查的异常。这意味着在编译阶段,编译器会检查代码中是否有适当的异常处理机制(例如,通过try-catch
块捕获异常或在方法签名中声明抛出异常)。
3.2、常见的检查性异常
-
IOException
:这是所有I/O操作相关异常的超类,例如在文件读写、网络通信等操作中可能会遇到。 -
SQLException
:专门用于数据库操作的异常,如执行SQL语句时出现错误。 -
FileNotFoundException
:当尝试访问或打开一个不存在的文件时抛出。 -
MalformedURLException
:当尝试创建一个URL对象,但提供的URL字符串格式不正确时抛出。 -
ClassNotFoundException
:当尝试加载一个类,但该类在类路径中找不到时抛出。 -
InstantiationException
:当尝试通过反射创建一个实例,但类无法被实例化时抛出,例如类没有无参构造函数。
public void readFile(String path) throws IOException {
try {
FileReader reader = new FileReader(path);
// 执行文件读取操作
} catch (FileNotFoundException e) {
System.out.println("文件未找到: " + e.getMessage());
throw e; // 可以选择重新抛出异常,让调用者处理
}
}
3.3、非检查性异常
检查性异常(Unchecked Exceptions)是Java中不需要在方法签名中显式声明或捕获处理的异常。它们通常是由于编程错误导致的,比如逻辑错误或运行时错误
3.4、常见的非检查性异常:
NullPointerException
:当尝试访问或操作一个空对象的成员时抛出。ArrayIndexOutOfBoundsException
:当尝试访问数组的非法索引时抛出。ArithmeticException
:当发生算术错误时抛出,例如除以零。IllegalArgumentException
:当方法被传递了不合法或不适当的参数时抛出。IllegalStateException
:当对象的状态不满足请求的操作时抛出。ConcurrentModificationException
:当集合被并发修改时抛出,通常在使用迭代器时遇到。
4、异常处理方式
在Java编程中,异常处理是确保程序稳定性和可靠性的重要手段。通过异常处理,开发者可以在程序运行时捕获并响应错误情况,避免程序异常终止。
在Java中,处理异常的方法主要有以下几种:
4.1、捕获异常(Try-Catch Block):
使用try
块来包围可能会抛出异常的代码。如果在try
块中抛出了异常,程序将不会崩溃,而是跳转到相应的catch
块中进行处理。finally
块中的代码无论是否抛出异常都会执行,通常用于执行清理工作,如关闭文件流或数据库连接。
try {
// 可能会抛出异常的代码
} catch (IOException e) {
// 处理IOException
} catch (SQLException e) {
// 处理SQLException
} finally {
// 无论是否抛出异常,都会执行的代码
}
4.2、声明抛出异常(Throws Clause):
在方法签名中使用throws
关键字声明该方法可能会抛出的异常。这将异常的处理责任传递给方法的调用者
public void readFile(String path) throws IOException {
// 可能会抛出IOException的代码
}