Java中的异常均以相同的方式工作。
检查和unchecked异常(这是所有子类之间的差别的RuntimeException)如果该抛出一个checked异常谁调用这个方法具有可尝试的方法/捕获该异常,或宣布自己的方法抛出该异常。
所以,如果我有一种方法:
void throwsACheckedException() throws SomeCheckedException;
叫它的人必须做2件事之一。要么:
try { throwsACheckedException();} catch (SomeCheckedException e) { //do something}要么
void someCallingMethod() throws SomeCheckedException { //pass it on throwsACheckedException();}无需声明的未经检查的异常,调用该方法的任何人都不必显式捕获。例如:
void someInnocentLookingMethod() { throw new NullPointerException("surprise!"); //...extends RuntimeException}然后您可以简单地调用它,而不会遇到try / catch的麻烦:
void unsuspectingVictim() { someInnocentLookingMethod();}未经检查的异常通常用于随时可能蔓延到您的事物,因此强迫开发人员尝试/捕获它们会使代码非常乏味(例如,NullPointerException),尽管有些人将事物检查的异常完全视为罪恶:
-)



