Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 博客中的这句话是什么意思,它说函数必须声明Throwable at方法签名才能捕获它?_Java_Exception_Throwable - Fatal编程技术网

Java 博客中的这句话是什么意思,它说函数必须声明Throwable at方法签名才能捕获它?

Java 博客中的这句话是什么意思,它说函数必须声明Throwable at方法签名才能捕获它?,java,exception,throwable,Java,Exception,Throwable,我试图理解Java中的异常处理,我在几篇文章中不断遇到下面提到的令人困惑的语句的变体- 捕获java.lang.Throwable实例是个坏主意,有几个原因,因为为了捕获它们,您必须在方法签名处声明,例如public void doSomething()抛出Throwable 这是从 然而,该代码编译- class CatchThrowable { void function() { try { throw new Th

我试图理解Java中的异常处理,我在几篇文章中不断遇到下面提到的令人困惑的语句的变体-

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

这是从

然而,该代码编译-

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关键字用于声明函数抛出的已检查异常,而不是它捕获的异常。请澄清引用的声明

声明:

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

这基本上是错误的

你只需要理解以下几点。存在异常层次结构 一个方法可以抛出所有类型的异常,这取决于您的需要,您捕获了哪些异常,而哪些异常没有捕获

捕获
错误
(其中包括您也不应该捕获
可丢弃的
)也不是一个好主意,因为存在一些严重的JMV-
虚拟机器错误
,如
OutOfMemoryError
,您通常不应该捕获这些错误


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

如果您在方法中捕获它,那么该方法不会将其抛出外部。Capiche?是的,我认为教程的意思是抛出异常的方法应该在它的签名中有
抛出异常
。我认为博客没有说得很清楚。相关的: