本文已参与掘金创作者训练营第三期「高产更文」赛道,详情查看: 掘力计划|创作者训练营第三期正在进行,「写」出个人影响力 。
在 Java 中,有两种类型的异常:
1)Checked: 是在编译时检查的异常。如果某个方法中的某些代码抛出了已检查的异常,则该方法必须要么处理该异常,要么必须使用 throws 关键字指定该异常。
例如,考虑以下 Java 程序,它打开位置“C:\test\a.txt”的文件并打印它的前三行。程序无法编译,因为main()函数使用 FileReader() 并且 FileReader() 抛出一个检查异常 FileNotFoundException 。它还使用了 readLine() 和 close() 方法,这些方法也会抛出检查异常 IOException
import java.io.*;
class Main {
public static void main(String[] args) {
FileReader file = new FileReader("C:\\test\\a.txt");
BufferedReader fileInput = new BufferedReader(file);
// 打印文件“C:\test\a.txt”的前三行
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
错误:(10, 50) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出
错误:(5, 27) java: 未报告的异常错误java.io.FileNotFoundException; 必须对其进行捕获或声明以便抛出
错误:(12, 24) java: 未报告的异常错误java.io.IOException; 必须对其进行捕获或声明以便抛出
为了修复上面的程序,我们要么需要使用 throws 指定异常列表,要么需要使用 try-catch 块。我们在下面的程序中使用了 throws。由于 FileNotFoundException 是 IOException 的子类,我们可以在 throws 列表中指定 IOException 并使上述程序无编译错误。
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
FileReader file = new FileReader("C:\\test\\a.txt");
BufferedReader fileInput = new BufferedReader(file);
// 打印文件“C:\test\a.txt”的前三行
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
输出:文件“C:\test\a.txt”的前三行如下
2) Unchecked: 是在编译时未检查的异常。在 C++ 中,所有异常都是未经检查的,因此编译器不会强制它处理或指定异常。程序员应该文明,并指定或捕获异常。\
在 Error 和 RuntimeException 类下的 Java 异常是未经检查的异常,在 throwable 下的所有其他异常都被检查。
+-----------+
| Throwable |
+-----------+
/ \
/ \
+-------+ +-----------+
| Error | | Exception |
+-------+ +-----------+
/ | \ / | \
________/ ______/ \
+------------------+
unchecked checked | RuntimeException |
+------------------+
/ | | \
_________________/
unchecked
考虑以下 Java 程序。它编译得很好,但在运行时会抛出 ArithmeticException 。编译器允许它编译,因为 ArithmeticException 是一个未经检查的异常。
class Main {
public static void main(String args[]) {
int x = 0;
int y = 10;
int z = y/x;
我们应该检查异常还是不检查异常?
以下是Java 文档的描述
底线准则:
如果可以合理地期望客户端从异常中恢复,请将其设为已检查异常。如果客户端无法从异常中恢复,则将其设为未经检查的异常
以上就是本篇文章的全部内容
💌 欢迎大家在评论区提出意见和建议!💌
如果你真的从这篇文章中学到了一些新东西,喜欢它,收藏它并与你的小伙伴分享。🤗最后,不要忘了❤或📑支持一下哦。