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: 龙不吟,虎不啸   

原文地址