我对Java的例外有基本的疑问如何为检查异常传播try catch块?
即,所有检查的异常从Exception
类延伸,并且未检查的例外从RuntimeException
延伸。但运行时异常也从Exception
延伸。
但是为什么要传播try
... catch
块已勾选Exceptions
但未处于未经检查的异常?
我对Java的例外有基本的疑问如何为检查异常传播try catch块?
即,所有检查的异常从Exception
类延伸,并且未检查的例外从RuntimeException
延伸。但运行时异常也从Exception
延伸。
但是为什么要传播try
... catch
块已勾选Exceptions
但未处于未经检查的异常?
一般来说,您应该针对您打算处理的每种特定类型的异常添加不同的catch
块。如果您试图处理(通过重新抛出)已检查的异常,那么您应该知道重新抛出哪种类型的异常 - 只需添加一个catch
块来重新抛出每个异常类型即可。
我想你是问,“我怎么能赶上Exception
但不RuntimeException
?
你也许不应该试图这样做。你应该捕获特定类型的异常时可能的。如果你需要处理所有错误,那么你就应该抓住Exception
,并且抓住一切。*
你很少会想这样做catch (NullPointerException)
,因为如果你知道你可以有一个null
那么你应该检查它。如果你的代码是导致NullPointerException
或ArrayOutOfBoundsException
那么你应该修复这些代码,以便它不再扔掉即
此代码应该告诉你怎么做你问什么:
public static void throwSomething(Exception throwMe)
{
try {
throw throwMe;
}
catch(Exception ex) {
// Check if the object is a RuntimeException
if(ex instanceof RuntimeException) {
// Throw the same object again.
// Cast to RuntimeException so the compiler will not
// require "throws Exception" on this method.
throw (RuntimeException) ex;
}
System.out.println("Caught an instance of a " +
ex.getClass().toString());
}
}
*其实,catch(Throwable)
将捕获的一切,包括Error
秒。
RuntimeException有一个异常超级Class.But检查异常可以把尝试... catch块。但未经检查的异常不会为什么? – user1357722
你是什么意思? catch(NullPointerException e)'工作正常。 –
最简单的方法是这样的:
try {
//do stuff
} catch(RuntimeException e) {
throw e;
} catch(SpecificCheckedException e) {
//handle
} catch(Exception e) {
//handle
}
并非所有的unchecked异常自RuntimeException扩展。除此之外,我不确定你在问什么 - 你是否想知道Java编译器如何强制执行检查异常被声明或处理的要求? – Perception
我认为这是一个非常好的问题,Error和它的子类也没有选中。我不确定,但我认为它们在编译器中被定义为被选中或未选中。 –
是的。但Iam尝试与ArrayIndexOutOfBoundsException比较,空指针异常等 – user1357722