{
example.method1();
example.method3();
}
catch( CheckedException ex ) { }
example.method2( null );
}
在 main()方法中,如果要调用 method1(),你必须把这个调用放在 try/catch 程序
块当中,因为它会抛出 Checked exception。
相比之下,当你调用 method2()时,则不需要把它放在 try/catch 程序块当中,因
为它会抛出的 exception 不是 checked exception,而是 runtime exception。会抛出
runtime exception 的方法在定义时不必声明它会抛出 exception。
现在,让我们再来看看 method3()。它调用了 method1()却没有把这个调用放在
try/catch 程序块当中。它是通过声明它会抛出 method1()会抛出的 exception 来避免这
样做的。它没有捕获这个 exception,而是把它传递下去。实际上 main()方法也可以这样
做,通过声明它会抛出 Checked exception 来避免使用 try/catch 程序块(当然我们反
对这种做法)。
小结一下:
1
、 Runtime exceptions:
在定义方法时不需要声明会抛出 runtime exception;
在调用这个方法时不需要捕获这个 runtime exception;
runtime exception 是从 java.lang.RuntimeException 或 java.lang.Error 类衍
生出来的。
2
、 Checked exceptions:
定义方法时必须声明所有可能会抛出的 checked exception;
在 调 用 这 个 方 法 时 , 必 须 捕 获 它 的 checked exception , 不 然 就 得 把 它 的
exception 传递下去;
checked exception 是从 java.lang.Exception 类衍生出来的。
二、逻辑上
从逻辑的角度来说,checked exceptions 和 runtime exception 是有不同的使用
目的的。checked exception 用来指示一种调用方能够直接处理的异常情况。而 runtime
exception 则用来指示一种调用方本身无法处理或恢复的程序错误。
checked exception 迫使你捕获它并处理这种异常情况。以 java.net.URL 类的构建
器 (constructor) 为 例 , 它 的 每 一 个 构 建 器 都 会 抛 出
MalformedURLException。MalformedURLException 就是一种 checked exception。
设想一下,你有一个简单的程序,用来提示用户输入一个 URL,然后通过这个 URL 去下
载一个网页。如果用户输入的 URL 有错误,构建器就会抛出一个 exception。既然这个
exception 是 checked exception,你的程序就可以捕获它并正确处理:比如说提示用户
重新输入。
再看下面这个例子:
public void method()
{