实现catch语句时是否创建了异常对象?
例如,catch(ArithmeticException someObject)
是否必须明确将此对象创建为实例?
答案 0 :(得分:0)
有两件事创建例外情况第二抛出例外
创建异常实例看起来像创建类的任何实例,例如NullPointerException npe = new NullPointerException();
,此时我们没有做任何事情而不是创建实例,有些时候我们没有自己创建Exception实例,我们将会看到
抛出异常我们throw
,你可以自己抛出异常,或者 JVM 会抛出
try
{
int a = 10/0;
}catch(ArithmeticException a)
{
RuntimeException exception = new RuntimeException("a very bad error occured", a);
throw exception;
}
当Java尝试计算10/0
时会遇到算术错误,因此 JVM 会创建一个类ArithmeticException
的实例并抛出这个创建的实例,您可以在{ {1}}子句,我们在其中创建类catch
的实例,它只是一个对象,然后使用RuntimeException
答案 1 :(得分:0)
在Arithmetic
异常的情况下,异常对象由JVM 在抛出异常时创建。
在内部,它正在执行等效的new
来创建异常对象。会发生什么是这样的:
在 源代码中不需要Java new
语句来实现此目的,
在JVM抛出异常的其他情况下会发生类似的事情;例如典型的NullPointerException
,ArrayIndexOutOfBoundsException
,StackOverflowError
例外情况,但在某些情况下,前3个或4个步骤已经过优化......具体取决于JVM等。
注意:(通常)在抛出异常的位置创建异常对象,因为这是可以捕获堆栈跟踪信息的时间。捕获异常时,原始堆栈框架早已消失。如果异常被捕获然后在另一个堆栈上重新抛出......或类似的东西,那就更是如此了。
答案 2 :(得分:0)
您正在创建一个对象。但是你没有创建它的实例。
当有人抛出它时,会创建Exception
对象实例。
try {
Foo foo = null;
foo.dofoo();
} catch(NullPointerException e) {
// ...
}
在这种特殊情况下,JVM创建了您在catch块中处理的NullPointerException
对象实例。
用少数几个词来想象,在JVM的某些部分,有类似的东西:
if (obj == null) {
throw new NullPointerException();
}
不要认真对待以前的代码示例。它是Exception throw的示例。