在某些情况下,如果一个方法产生自己不做处理的异常,他就必须在throws语句中声明该异常.下面是包含throws语句的方法的基本形式:
ret-type methName(param-list) throws except-list { //body; }
此处,except-list是一个由逗号分隔的异常列表,这些异常可能是由某个方法抛到外层的.
你可能会想为何在前面的一些示例中没有为抛出异常的方法指定throws语句.答案就是,凡是Error或RuntimeException子类的异常都不必在throws列表中指定.Java简单的假定一个方法可以抛出一个这样的异常.所有其他类型的异常都需要声明.如果没有,就会引起编译时错误.
实际上,我们已经看到了throws语句的一个示例,回忆一下,当执行键盘输入时,需要在main()中添加如下语句:
throws java.io.IOException
现在可以理解为什么了吧,一条输入语句可能产生一个IOException异常,而此时我们无法处理该异常.因此要从main()抛出这个异常,而且需要这样来指定异常了解异常之后,就可以轻松的处理IOException异常了.
我们看一下处理IOException异常的示例.该例创建一个名为prompt()的方法,该方法显示一条提示消息,然后从键盘读取一个字符.因为正在执行输入,所以可能会发生IOException异常.然而prompt()方法自己不能处理IOException异常,所以他使用了一条throws语句.这就意味着调用prompt()的方法必须处理该异常.本例中,调用prompt()的方法是main(),那么需要他处理错误:
public class test2 { // @param args public static void main(String args[]) { char ch; try { ch = Rethrow.inputChar("input something"); }catch(java.io.IOException exc) { System.out.println("error"); } } } class Rethrow { public static char inputChar(String str) throws java.io.IOException { System.out.println(str+":"); return (char)System.in.read(); } }
还有相关的一点是,注意IOException被其包名Java.io完全限定.