Java 认识异常并掌握使用
什么是异常?
在 Java 基础语法中,当程序执行过程中发生错误或异常时,会抛出异常,异常即指程序在运行过程中遇到的错误或意外情况。Java 中的异常是用于处理程序意外情况的一种机制。
异常的分类
Java 中的异常一般分为两类:可检查异常(checked exception)和不可检查异常(unchecked exception)。
- 可检查异常:这种类型的异常在编码时必须使用 try-catch 块或者 throws 关键字进行处理,不处理编译时会报错。
- 不可检查异常:这种类型的异常在编码时可以不处理,如果不处理,在运行时会抛出异常。
异常处理的方法
异常的处理可以使用 try-catch-finally 块进行处理,也可以使用 throws 关键字将异常抛给调用者。
try-catch-finally 块
try {
// 可能会抛出异常的代码块
} catch (Exception e) {
// 处理异常的代码块
} finally {
// 最后一定执行的代码块
}
在 try 块中写可能会抛出异常的相关代码,在 catch 块中处理异常,如果有多个 catch 块,从上到下按顺序匹配异常类型进行处理。
finally 块中的代码一定会执行,无论 try 和 catch 块中是否有异常抛出,都会执行 finally 块中的代码。finally 块一般用于释放资源等操作。
throws 关键字
当一个方法将异常抛给调用者时,需要在方法中使用 throws 关键字,如下所示:
public void test() throws Exception {
// 可能会抛出异常的代码块
}
调用该方法时,调用者需要处理或者继续抛出该异常。
示例说明
可检查异常的处理
在下面的示例代码中,我们可以看到,当调用 FileInputStream
的构造方法时,需要抛出 FileNotFoundException
异常。由于该异常为可检查异常,所以在编码时需要使用 try-catch-finally 块进行处理。
示例代码如下:
public class Demo {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("D:\\test.txt");
// TODO 业务处理
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
在上述示例代码中,我们通过使用 try-catch-finally 块捕获了 FileNotFoundException
异常,并在 finally 块中释放了文件流资源。
不可检查异常的处理
在下面的示例代码中,我们可以看到,当数组下标越界时,会抛出 ArrayIndexOutOfBoundsException
异常,该异常为不可检查异常,所以不需要在编码时进行处理。
示例代码如下:
public class Demo {
public static void main(String[] args) {
String[] arr = new String[3];
System.out.println(arr[3]);
}
}
在上述示例代码中,当使用 System.out.println(arr[3])
时,会抛出 ArrayIndexOutOfBoundsException
异常,我们可以在控制台看到完整的异常信息。
总结
Java 中的异常是处理程序意外情况的重要机制,可检查异常必须在编码时进行处理,而不可检查异常则可以忽略。在异常处理时,我们可以使用 try-catch-finally 块进行处理,也可以使用 throws 关键字将异常抛给调用者。最后,需要注意资源的释放,在 finally 块中释放资源是一种较好的方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 认识异常并掌握使用 - Python技术站