黑马程序员技术交流社区

标题: throws和try/catch的区别与联系 [打印本页]

作者: onETT    时间: 2015-4-23 20:52
标题: throws和try/catch的区别与联系
1.throws告诉了编译器方法可能产生异常问题,并把问题抛给了try/catch,让try/catch来负责捕获异常。 throws Exception是写在方法后面的,属于契约式编程,就是告诉编译器本方法可能会抛出该类型异常,由方法的调用者去处理。如果不想编写捕获异常的具体代码的话,使用 throws Exception 的形式, 把异常再次抛出,交给JVM(Java虚拟机)可以捕获。这是一种比较省事的办法。
2.当声明了throws之后,异常将会被抛出。但有些异常不能捕捉,这时候就要用到try/catch了。

下面是一个不正确的例子。该例试图引发一个它不能捕获的异常。因为程序没有指定一个throws子句来声明这一事实,程序将不会编译。

Java代码  收藏代码
class ThrowsDemo {  
static void throwOne() {  
System.out.println("Inside throwOne.");  
throw new IllegalAccessException("demo");  
}  
  
public static void main(String args[]) {  
throwOne();  
}  
}  
为编译该程序,需要改变两个地方。第一,需要声明throwOne( )引发IllegalAccessException异常。第二,main( )必须定义一个try/catch 语句来捕获该异常。
正确的例子如下:
Java代码  
class ThrowsDemo {  
static void throwOne() throws IllegalAccessException {  
System.out.println("Inside throwOne.");  
throw new IllegalAccessException("demo");}  
  
public static void main(String args[]) {  
try {  
throwOne();  
} catch (IllegalAccessException e) {  
System.out.println("Caught " + e);  
}  
}  
}  
下面是例题的输出结果:
inside throwOne
caught java.lang.IllegalAccessException: demo




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2