Java异常处理中throw与throws的用法区别

前言

   说到异常,我们当然会想到try catch finally。当然如果用这个的话,被try块包围的代码说明这段代码可能会发生异常,一旦发生异常,异常便会被catch捕获到,然后需要在catch块中进行异常处理。当然这只是一种处理异常的方式,那么在java中还有另一种处理方式就是抛出异常,让调用者进行处理,自己就不再负责了,就学习到了throw 和throws。那么两者有什么区别呢?


throws语句

   throw是语句抛出一个异常

   语法:throw(异常对象);

throw e;

   具体例子:

</pre><pre code_snippet_id="1956918" snippet_file_name="blog_20161030_1_1743262" name="code" class="csharp"><pre name="code" class="java"><span style="font-family:KaiTi_GB2312;font-size:24px;"></span><pre name="code" class="java"><span style="font-family:KaiTi_GB2312;font-size:24px;">package demo;

public class demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s = "abc"; 
	    if(s.equals("abc")) { 
	      throw new NumberFormatException(); 
	    } else { 
	      System.out.println(s); 
	    } 
	}
}</span>

运行结果:

      


throws

   throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)   

   语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{......}      

   如: public void function() throws Exception{......}

   当某个方法可能会抛出某种异常时用于throws 声明可能抛出的异常,然后交给上层调用它的方法程序处理。如:

<span style="font-family:KaiTi_GB2312;font-size:24px;">public class throwsdemo {
	public static void function() throws NumberFormatException{ 
	    String s = "abc"; 
	    System.out.println(Double.parseDouble(s)); 
	  } 

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try { 
		      function(); 
		    } catch (NumberFormatException e) { 
		      System.err.println("非数据类型不能转换。"); 
		      //e.printStackTrace(); 
		    } 

	}

}</span>

运行结果:

               


throw与throws的区别

通过上面的两个demo可以得知:

1、throw用在方法体内,上面代码显示了,是直接在main方法体内

   throws用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。这个看上面的代码就理解了

2、throw是具体向外抛异常的,抛出的是一个异常实例

   throws声明了是哪种类型的异常,使它的调用者可以捕获这个异常

3、throw,如果执行了,那么一定是抛出了某种异常了,安生throws表示可能出现,但不一定。

4、同时出现的时候,throws出现在函数头、throw出现在函数体,两种不会由函数去处理,真正的处理由函数的上层调用处理


好的编程习惯

1、在写程序时,对可能会出现异常的部分通常要用try{...}catch{...}去捕捉它并对它进行处理;

2、如果是系统异常的话可以什么都不用做,也可以针对方法抛出一个异常,但是还是建议针对方法写一个throws,因为这样在完成一个大型任务的时候可以让别的程序员知道这里会出现什么异常。

  • 26
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光下是个孩子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值