throws和try/catch的区别与联系

先说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 


throws 只是把一个异常抛出去了,如果你的上层代码有处理方式,就由上层代码来处理这个异常。
而try/catch对是清楚的知道该操作可能出现什么异常,同时在catch块中应该有处理的方法。
而且还有一种方式就是try/catch/finaly的方式。


 转自:http://meipeng1114-163-com.iteye.com/blog/941743

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值