隐含和显式异常差异

时间:2009-06-30 18:39:21

标签: java

隐式异常和显式异常之间有什么区别?

如果我声明catch块如:catch(异常e)。这是隐式声明异常还是显式?

提前致谢。

4 个答案:

答案 0 :(得分:2)

我不相信有任何“隐含异常”或“明确异常”这样的术语。您是否正在考虑检查和未检查的例外?

我刚刚将语言规范下载为PDF,并且其中的任何地方都不存在短语“隐式异常”和“显式异常”。

你能说出你在哪里遇到这些条款吗?

答案 1 :(得分:1)

我认为隐式实例化对象是在没有显式调用构造函数的情况下完成的。我认为你不能用Java做到这一点。

示例:

throw new Exception();

调用构造函数,然后抛出新创建的Exception对象。

答案 2 :(得分:0)

都不是。捕获不是宣布例外。声明异常发生在方法上:

pubic void someMethod() throws Exception.

我不确定隐含与显式是什么意思。您可能意味着类似于运行时和已检查异常之间的差异,但您也可能意味着抛出运行时异常的方法,这是可选的。

public void someMethod() throws NullPointerException

在这种情况下的抛出是纯粹可选的,因为它是一个运行时异常,没有什么不同的。

答案 3 :(得分:0)

这仅适用于问题的第一部分:

术语显式和隐式异常确实存在,并且与Java虚拟机如何处理异常有关。从最终用户(Java程序员)视图来看,它们是相同的(除了明显的性能优势)。

显式异常是JVM明确检查的异常。例如,您执行的每个数组索引操作都由JVM显式检查是否在范围内。

隐含异常是在善后发生的异常。例如,NullPointerExceptionStackOverflowException会在分段错误的处理程序例程中抛出。这是一个相当大的性能提升,因为操作系统会通过操作系统发出JVM信号,而不必在可能引发的每个操作上产生开销。