我知道每个 java 类都应该扩展 Throwable 类,以便可以处理异常。这是通过以下方式完成的:
public class Test extends Throwable
或者
public class Test throws Throwable?
原始类型或类不扩展 Throwable 的对象不能作为异常抛出。
解释:
throw 3;
不起作用,因为 3 是原始类型。
throw new String();
不起作用,因为String
不扩展Throwable
。
throw new RuntimeException();
有效,因为RuntimeException
它是 的子类Throwable
。
当一个类扩展一个 Throwable 时,该类是 Throwable 的子类,您可以在代码中的任何位置将该类作为 Throwable 抛出。
class MyCoolThrowable extends Throwable{
try {
//... some error ...
} catch (MyCoolThroable t) {
//... handle the throwable
}
}
您将throws Throwable添加到构造函数或方法,以便调用您的构造函数/方法的代码将被迫使用 try-catch
void mySweetMethod() throws Throwable {
//...
}
try {
mySweetMethod();
} catch(Throwable t) {
//... handle it here
}
我认为这澄清了你所读到的内容:)
我知道每个 java 类都应该扩展 Throwable 类,以便可以处理异常。
不,有人骗了你。
要处理异常,您需要记住两件事:
如果它是一个已检查try...catch
的异常,那么如果没有包装不可靠代码的块,或者如果您没有声明要抛出的异常,则该类将拒绝编译。
try {
File f = new File("Foo.txt");
} catch (FileNotFoundException f) {
System.out.println("File doesn't exist!");
}
或者:
public void doDodgyStuffWithFile throws FileNotFoundException { }
如果它是一个未经检查的异常,那么你不会因为没有捕捉到狡猾的代码而导致编译时失败,但你可能会从中得到运行时异常。
String input = scanner.nextLine();
System.out.println(Integer.parseInt(input));
如果您要抛出或捕获异常,请尽可能具体。 不要屈服于 throw/catch 的诱惑Exception
,永远不要抓住Throwable
.