throw与throws区别

throw关键词

throw关键词用于方法体内部,用于抛出一个Throwable类型异常。如果抛出了检查异常,则还应该在头部声明方法可能抛出的异常类型。

该方法的调用者也必须检查处理抛出的异常。如果所有的方法都层层上抛获取的异常,最终JVM会进行处理,处理也很简单,就是打印异常

消息和堆栈信息。如果抛出的是Error或RuntimeException,则该方法的调用者可选择处理该异常。

throws关键词

throws关键词用于方法体外部的方法声明部分,用来声明方法可能会抛出的某些异常。仅当抛出了检查异常,该方法的调用者才必须处理或者重新

抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,而不是囫囵吞枣般在catch块中打印堆栈信息来做处理。

下面我们来看几段代码:

代码一:

public static void main(String[] args){

try{

test();

}catch(Exception e){

e.printStackTrace();

}

}

static void test(){

try{

throw new Exception("test");

}catch(Exception e){

e.printStackTrace();

}

}

此段代码能正常运行,这是典型的捕获

代码二:

public static void main(String[] args){

try{

test();

}catch(Exception e){

e.printStackTrace();

}

}

static void test(){

throw new Exception("test");

}

改成这样将不能执行,虽然主函数里面的test()方法异常可以捕获,但是test()函数里面的异常抛出不能捕获

代码三:

public static void main(String[] args){

try{

test();

}catch(Exception e){

e.printStackTrace();

}

}

static void test() throws Exception{

throw new Exception("test");

}

如果在上面代码的test()头部显示的抛出异常,程序可以正常编译通过

代码四:

public static void main(String[] args){

try{

test();

}catch(IOException e){

e.printStackTrace();

}

}

static void test() throws Exception{

}

如果把test()函数体内的异常抛出去掉,把main函数里面的异常捕获改成IO异常程序又会出错,因为虽然程序并没有抛出异常,

但是test()函数在声明时表示可能抛出一个Exception类型的异常,所以这里必须catch一个Exception类型的异常,即可以将IO异常捕获改成Exception异常捕获

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值