为什么Exceptions有时只需要在try / catch中包围?

时间:2011-12-06 18:18:44

标签: java exception

我有一个静态的Factory类,如果在调用之前没有init,则抛出异常。我不明白为什么eclipse因为在工厂中抛出异常(它要求我在try / catch中包围抛出)而对我大吼大叫,但在另一个我抛出UnsupportedOperationException的类中,eclipse是很好。

是否有规则我不知道我违反了?

我的静态电话(问题来源):

public static Object createObject() {
    if (CONTEXT == null)
        throw new InstantiationException("Factory not inited.");
    // ...
}

编辑:我意识到这可能更适合作为单身而不是静态类,但问题仍然存在。

3 个答案:

答案 0 :(得分:12)

您需要查看Checked例外和未经检查的例外之间的区别。

http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html

如果抛出的异常是从RuntimeException派生的,则它是Unchecked,不需要显式声明/处理。所有其他人必须是。

答案 1 :(得分:1)

未选中

UnsupportedOperationException,但会检查InstantiationException。不同之处在于,Exception扩展RuntimeExceptionchecked and unchecked exceptions扩展{{1}}。

答案 2 :(得分:1)

您应该在方法标题中添加throws子句:

public static Object createObject() throws InstantiationException

RuntimeException上,Java doc说

  

不需要在其throws子句

中声明方法

这就是为什么eclipse在方法声明中没有看到它时不会尖叫。