这段代码可能抛出什么异常?

时间:2011-09-29 14:20:11

标签: java exception exception-handling jaxb

我想知道这个代码可以抛出哪种异常,所以我可以捕获它们而不只是捕获泛型异常(尝试重现错误导致异常很难在这里因为它需要花费很多时间来设置使用的请求)

JAXBContext jc = JAXBContext.newInstance(QueryReport.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.valueOf(true));

marshaller.marshal(requestService, out);
is = new ByteArrayInputStream(out.toByteArray());
JAXBReader jcReader = new JAXBReader("QueryReport");

log.debug("\n# XML QueryRequest Response: " + jcReader.read(is).asXML());

所以,如果有人知道可能会抛出哪些异常。

由于

7 个答案:

答案 0 :(得分:2)

Eclipse,Netbeans或任何其他现代IDE将准确地告诉您引发了哪些异常。

我猜你至少会看到ClassNotFoundException,IOException和JAXBExceptions。

答案 1 :(得分:1)

假设您正在讨论未经检查的异常,那么API设计者通常有一个很好的理由决定不对其进行检查。但是如果你必须完全捕获它们,那么你应该阅读你正在使用的方法的API。

答案 2 :(得分:1)

从您显示的代码块中,如果无法从类路径中找到JAXBContext,则可能会在调用QueryReport.class ClassNotFoundException 时出现JAXBException如果对ByteArrayInputStream的调用失败,则 IOException

您可以使用IDE将生成的try / catch块包含在相关的代码部分中,并使用它认为适合语法块的异常。

答案 3 :(得分:1)

为什么需要单独捕捉它们?对于每一个,你有什么不同的做法?如果答案是“没有”,那么就一般地抓住它们。

如果您还没有,请阅读Effective Java中有关例外的部分,和/或阅读“Effective Java Exceptions”(其他作者)。

如果我正在向合唱团讲道 - 我道歉。

在程序顶部附近的某个级别,您可能希望捕获未经检查的异常 - 例如NullPointerException。

答案 4 :(得分:0)

如果您明确需要捕获任何异常,那么将检查这些异常。这意味着您只需要捕获编译器告诉您的异常。

答案 5 :(得分:0)

您使用的是IDE吗? Eclipse(通过编译器)将准确地告诉您将抛出哪些异常,甚至为这些异常生成样板catch块。或者,您可以查看每个方法调用的API,以查看可能的异常。

答案 6 :(得分:0)

如果不将此代码块放入任何try块中,编译器将告诉您该方法必须捕获或抛出哪些异常。

此代码可能引发的任何其他异常都是运行时异常,这是编程错误的标志,因此不会被捕获,因为它只会隐藏错误而不是强迫您修复它