throws和try/catch的区别与联系

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子句来声明这一事实,程序将不会编译。

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 语句来捕获该异常。

正确的例子如下:

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 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值