Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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-更精确的重试功能_Java_Exception_Rethrow - Fatal编程技术网

Java-更精确的重试功能

Java-更精确的重试功能,java,exception,rethrow,Java,Exception,Rethrow,在oracle官方网站上写:() 具体地说,在Java SE 7及更高版本中,当您在catch子句中声明一个或多个异常类型,并重新抛出此catch块处理的异常时,编译器将验证重新抛出异常的类型是否满足以下条件: 试块可以把它扔出去 没有其他前面的catch块可以处理它 它是catch子句异常参数之一的子类型或超类型 请关注第三点(它是catch子句异常参数之一的子类型或超类型) 这到底意味着什么?你能给我举个例子吗?我不能很清楚地理解它。子类型部分非常简单-因为所有子类型也是它们的父类型,所

在oracle官方网站上写:()

具体地说,在Java SE 7及更高版本中,当您在catch子句中声明一个或多个异常类型,并重新抛出此catch块处理的异常时,编译器将验证重新抛出异常的类型是否满足以下条件:

  • 试块可以把它扔出去

  • 没有其他前面的catch块可以处理它

  • 它是catch子句异常参数之一的子类型或超类型
请关注第三点(它是catch子句异常参数之一的子类型或超类型)


这到底意味着什么?你能给我举个例子吗?我不能很清楚地理解它。

子类型部分非常简单-因为所有子类型也是它们的父类型,所以允许捕获和重新调用任何子类型都是非常合法的。我相信从第一天起就是这样(或者至少在我记忆最深刻的时候)

至于超类型,这是Java7中添加的一个增强。以以下为例:

public class Demo {

    static class Exception1 extends Exception{}

    public static void main(String[] args) throws Exception1 {
        try {
            throw new Exception1();
        }
        catch(Exception ex) {
            throw ex;
        }
    }

}
您可能一开始认为它不会编译,因为
main()
方法只声明它抛出一种类型的
Exception1
,而catch参数指定了
Exception
。显然,并非所有的
Exception
对象都是
Exception1


但是,
catch
参数是
Exception1
的超类型(满足上述excert的超类型要求),抛出的异常类型与方法上的
throws
语句中声明的类型相同。因此,编译器可以验证在此上下文中重新引用此异常是否有效,并且编译成功。

我唯一不了解的部分是子类型。如果你能举出任何一个发生的情况的例子,我将非常感谢,因为我来自巴西,有些英语对我来说不太清楚。再次感谢你!