隐式异常和显式异常之间有什么区别?
如果我声明catch块如:catch(异常e)。这是隐式声明异常还是显式?
提前致谢。
答案 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显式检查是否在范围内。
隐含异常是在善后发生的异常。例如,NullPointerException
和StackOverflowException
会在分段错误的处理程序例程中抛出。这是一个相当大的性能提升,因为操作系统会通过操作系统发出JVM信号,而不必在可能引发的每个操作上产生开销。