我在理解Java中checked
和unchecked
异常之间的区别方面遇到了一些问题。
checked
异常被认为是在编译时查找异常情况。不同来源提供的例子如数据库连接、文件处理等都是其中的一些,而unchecked
异常则被认为是在程序员的错误方面查找异常情况,例如数组索引超出范围等。
这难道不应该是反过来吗?我的意思是,数据库连接是在运行时完成的,对吧?文件处理也是一样。您不会在编译时打开一个文件句柄,那么为什么要在编译时查找可能发生的错误呢?另一方面,将数组索引超出其范围已经在程序中完成,可以在编译时进行检查(如果异常索引由用户在运行时提供,则可以作为运行时问题)。我错过了什么吗?
2 其次,RunTimeException
本身是unchecked
,如何成为checked
的Exception
的子类?这意味着什么?
我在Herbert Schildt的书中发现了一个例子,解释了使用checked
异常的用法:
class ThrowsDemo {
public static char prompt(String str)
throws java.io.IOException {
System.out.print(str + ": ");
return (char) System.in.read();
}
public static void main(String args[]) {
char ch;
try {
ch = prompt("Enter a letter");
}
catch(java.io.IOException exc) {
System.out.println("I/O exception occurred.");
ch = 'X';
}
System.out.println("You pressed " + ch);
}
}
这里需要 throws
子句吗?我为什么不能像这样正常使用 try-catch
语句(很抱歉我不知道如何模拟IO Exception
,所以无法自行检查!):
class ThrowsDemo {
public static char prompt(String str) {
System.out.print(str + ": ");
return (char) System.in.read();
}
public static void main(String args[]) {
char ch;
try {
ch = prompt("Enter a letter");
}
catch(java.io.IOException exc) {
System.out.println("I/O exception occurred.");
ch = 'X';
}
System.out.println("You pressed " + ch);
}
}