throw和throws的区别和联系
突然发现今天诗兴大发,看来又得写点内容了。
throw和throws对于Java程序员而言它们真的不是很陌生。但对于我这样的选手而言一提到它们的区别和联系就蒙圈了...
为了以后不蒙圈,今天就研究一下吧~~
如果有不足的地方欢迎批评指正...
1)throws
对于throws关键字而言一般用于抛出编译时的异常,如果某个异常是编译是异常,那么这个异常就需要捕获(try{}catch{}finally{})
或者抛出(throws)。否者的话是无法通过编译的。
这里再简单讲讲二者的区别
对于try{}catch{}finally{}而言,相应的异常已经在程序里面捕获。相应的catch中也已经处理了相关的异常,不会再向上抛出。上层
调用者是不需要进行任何处理的。
对于throws而言,当前程序不会对异常进行任何处理,如果出现异常的话,仅仅抛出而不做处理,对应的处理需要上层来负责。对应的
上层调用者必须处理这个异常或者继续向上抛出对应的异常。
说白了以公司为例:
客户给开发提了一个bug,如果开发人员能够处理(try{}catch{}finally{}),就自己处理了,不会在告诉项目经
理。但是如果开发处理不了,开发就会找项目经理(开发的throws)如果项目经理能够处理,就搞定(try{}catch{}finally{}),如果
搞不定 就找总经理(项目经理的throws)反正最终为题会被处理的(不敢不处理啊,客户是上帝啊~~哈哈)
下面是一个throws的简单例子:
package com.yonyou.test; import java.io.File; import java.io.FileInputStream; import java.io.IOException; /** * 测试类 * @author 小浩 * @创建日期 2015-3-2 */ public class Test{ public static void main(String[] args) throws IOException { File file=new File("C:\text.txt"); FileInputStream fis=new FileInputStream(file); byte []b=new byte[10]; while(fis.read(b)!=-1) { System.out.println(new String(b)); } } }
2)throw
对于throw而言一般是用在抛出一个异常对象,使用的不是很多。具体的看下面的例子:
package com.yonyou.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; /** * 测试类 * @author 小浩 * @创建日期 2015-3-2 */ public class Test{ public static void main(String[] args) throws MyException{ File file=new File("C:\text.txt"); FileInputStream fis; try { fis = new FileInputStream(file); byte []b=new byte[10]; while(fis.read(b)!=-1) { System.out.println(new String(b)); } } catch (IOException e) { //处理捕获的异常,并抛出一个异常对象 throw new MyException("龙不吟,虎不啸"); } } } /** * 自定义异常 * @author 小浩 * @创建日期 2015-3-2 */ class MyException extends Exception{ private static final long serialVersionUID = 1L; public MyException(String info){ super(info); } }
运行的结果为:
Exception in thread "main" com.yonyou.test.MyException: 龙不吟,虎不啸 //用户自定义的异常对象
at com.yonyou.test.Test.main(Test.java:27)
好吧今天就先到这里吧~~ See You