1

我正在尝试理解 Java 中的异常处理,并且在几篇文章中不断遇到下面提到的令人困惑的陈述的变体 -

捕获 java.lang.Throwable 的实例是个坏主意有几个原因,因为为了捕获它们,您必须在方法签名处声明,例如 public void doSomething() throws Throwable

这是来自http://javarevisited.blogspot.com/2014/02/why- catch-throwable-or-error- is-bad.html#ixzz4hQPkFktf

但是,此代码编译 -

class CatchThrowable
{

    void function()
    {

        try
        {
            throw new Throwable();
        }
        catch (Throwable t)
        {

        }
    }

    public static void main(String[] args)
    {

        try
        {

        }
        catch (Throwable t)
        {

        }
    }
}

main 和 function 都能够在不声明抛出它的情况下捕获 Throwable。我的理解是throws关键字用于声明函数抛出的检查异常,而不是它捕获的异常。请澄清引用的声明。

4

1 回答 1

1

该声明:

为了捕捉它们,您必须在方法签名处声明,例如 public void doSomething() throws Throwable

基本上是错误的。

您只需要了解以下内容。有一个异常层次结构 在此处输入图像描述 一个方法可以抛出所有类型的异常,它只是取决于你的需要你捕获了哪个,哪个没有。

捕捉也不是一个好主意Error(包括你也不应该捕捉Throwable),因为有一些严重的 JMV-VirtualMachineError喜欢OutOfMemoryError你通常不应该捕捉。

throws但这与方法在其部分声明的事实无关。

于 2017-05-18T11:30:58.980 回答