-3

我知道每个 java 类都应该扩展 Throwable 类,以便可以处理异常。这是通过以下方式完成的:

public class Test extends Throwable

或者

public class Test throws Throwable?
4

3 回答 3

3

原始类型或类不扩展 Throwable 的对象不能作为异常抛出。

解释:

throw 3;

不起作用,因为 3 是原始类型。

throw new String();

不起作用,因为String不扩展Throwable

throw new RuntimeException();

有效,因为RuntimeException它是 的子类Throwable

于 2014-01-20T19:40:32.477 回答
0

当一个类扩展一个 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
}

我认为这澄清了你所读到的内容:)

于 2014-01-20T19:42:28.377 回答
0

我知道每个 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.

于 2014-01-20T20:03:55.980 回答