0

这4种类型Throwable constructors是:-

Throwable() :构造一个新的 throwable,其详细消息为 null。

Throwable(String message) :使用指定的详细消息构造一个新的 throwable。

Throwable(String message, Throwable cause) :构造一个带有指定详细消息和原因的新 throwable。

Throwable(Throwable Cause) : 构造一个新的 throwable 指定原因和 (cause==null ? null : cause.toString()) 的详细消息

在一段代码中,前两个构造函数类型工作正常,但是另外两个报编译时错误。

IOException e = new IOException();  //Working properly

ArithmeticException ae = new ArithmeticException("Top Layer");  //Working properly

ArithmeticException ae = new ArithmeticException("Top Layer", e);  //Not working

ArithmeticException ae = new ArithmeticException(e);  //Not working

最后两个声明报错

没有找到适合 ArithmeticException 的构造函数

我正在使用 JDK 8

为什么最后两个声明都报告错误?另外我如何让它们工作?

4

2 回答 2

3

因为ArithmeticException未经检查的异常和来自RuntimeException

RuntimeException 及其子类是未经检查的异常。如果未经检查的异常可以通过方法或构造函数的执行抛出并传播到方法或构造函数边界之外,则不需要在方法或构造函数的 throws 子句中声明它们。

来自算术异常

没有如下构造函数,这就是它给你编译时错误的原因:

AithmeticException ae = new ArithmeticException("Top Layer", e);  //Not working
ae = new ArithmeticException(e);  //Not working

最好为此使用RuntimeException :

RuntimeException ae = new RuntimeException("Top Layer", e);  
ae = new RuntimeException(e);
于 2015-06-18T12:47:50.627 回答
1

如果您检查 JavaDoc 中的 ArithmeticException

http://docs.oracle.com/javase/7/docs/api/java/lang/ArithmeticException.html

你会看见:

构造函数和描述

ArithmeticException() 构造没有详细消息的 ArithmeticException。ArithmeticException(String s) 构造带有指定详细消息的 ArithmeticException。

所以这些构造函数都没有实现:

Throwable(String message, Throwable cause) : Constructs a new throwable with the specified detail message and cause.

Throwable(Throwable cause) : Constructs a new throwable with the specified cause and a detail message of (cause==null ? null : cause.toString())
于 2015-06-18T12:49:16.340 回答