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的简单例子:
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而言一般是用在抛出一个异常对象,使用的不是很多。具体的看下面的例子:
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("龙不吟,虎不啸");
}
}
-----------------------
class MyException extends Exception{
private static final long serialVersionUID = 1L;
public MyException(String info){
super(info);
}
}
运行的结果为:
Exception in thread "main" com.yonyou.test.MyException: 龙不吟,虎不啸