background image

 
{
  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()
  {