throws和try/catch的区别与联系

来源:互联网 发布:淘宝上宝贝的视频教程 编辑:程序博客网 时间:2024/05/28 15:23

java的学习中我们总会遇到对一些异常处理,经过自己在网上查询相关的内容,找到一些知识和大家分享。

先说throw,它是一种控制程序流程的特殊方法而已。没有相应的catch的话,可以中止当前的方法继续执行。
这个不做具体的说明,我们重点说一下try/catch和throws的区别与联系

throws在声明方法时候,如果不声明throws的话,那么一般的Exception都要在这个方法中终结。所以他必须有相应的catch处理编译时的一场来避免错误的发生。当声明了throws之后,异常将会被抛出,就像是石头被丢出去一样。但有些异常不能捕捉,这时候就要用到try/catch了。

try/catch可以这样理解,如果throws相当于职业介绍的中介,那么try/catch就是倒霉的打工仔。为什么这么说呢?那是因为,throws只告诉了编译器方法可能产生异常问题,并把问题抛给了try/catch,让try/catch来负责捕获异常。这样看来try/catch就是拿个网兜在那里接石头了。

throws Exception是写在方法后面的,属于契约式编程,就是告诉编译器本方法可能会抛出该类型异常,由方法的调用者去处理。try catch就不用说了,就是那么个意思。

在你编写的程序中,有些语句可以会发生异常,这时Java编译器要求你必须 进行捕获,才可以运行。 
(1)如果你不想编写捕获异常的具体代码的话,你可以使用 throws Exception 的形式, 把异常再次抛出,交给JVM(Java虚拟机)可以捕获。这是一种比较省事的办法。 
(2)如果你想亲编写处理异常的代码的话,可以使用try{ }catch(){ }的形式,进行捕获, 一旦程序发生异常,它就会安照你catch{ }块编写的代码去执行。

我个人推荐你养成使用后者的习惯!

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

Java代码  收藏代码
  1. class ThrowsDemo {  
  2. static void throwOne() {  
  3. System.out.println("Inside throwOne.");  
  4. throw new IllegalAccessException("demo");  
  5. }  
  6.   
  7. public static void main(String args[]) {  
  8. throwOne();  
  9. }  
  10. }  

 为编译该程序,需要改变两个地方。第一,需要声明throwOne( )引发IllegalAccessException异常。第二,main( )必须定义一个try/catch 语句来捕获该异常。

正确的例子如下:

Java代码  收藏代码
  1. class ThrowsDemo {  
  2. static void throwOne() throws IllegalAccessException {  
  3. System.out.println("Inside throwOne.");  
  4. throw new IllegalAccessException("demo");}  
  5.   
  6. public static void main(String args[]) {  
  7. try {  
  8. throwOne();  
  9. catch (IllegalAccessException e) {  
  10. System.out.println("Caught " + e);  
  11. }  
  12. }  
  13. }  

 下面是例题的输出结果:
inside throwOne
caught java.lang.IllegalAccessException: demo 


原创粉丝点击