黑马程序员技术交流社区

标题: 如果函数内部try,catch处理了,函数上还要用throws抛异不? [打印本页]

作者: 菠萝包丶    时间: 2014-5-25 11:13
标题: 如果函数内部try,catch处理了,函数上还要用throws抛异不?
本帖最后由 菠萝包丶 于 2014-5-26 00:25 编辑

一般在函数内部try,catch处理异常了,函数上还要用throws抛异常么??
  1. /**
  2. * 需求:设计一个从命令行(键盘)输入一个字符串的程序,若该字符串为“123”
  3. * 则抛出一个Exception123的异常(自定义异常),并显示“由字符串123所引起的异常”*/
  4. import java.util.*;
  5. class Exception123 extends Exception
  6. {
  7.         Exception123(String msg)
  8.         {
  9.                 super(msg);
  10.         }
  11. }
  12. public class MyException
  13. {
  14.         public static void main(String[] args)throws Exception123  //下面已经处理异常了,我这还需要throws抛出自定义异常么?
  15.         {
  16.                 String str;
  17.                 Scanner reader =new Scanner(System.in);
  18.                 System.out.println("请输入:");
  19.                 try
  20.                 {
  21.                         str=reader.next();
  22.                                 if(str.equals("123"))
  23.                                         throw new Exception123("由字符串123引起的异常");
  24.                         System.out.println("你输入的字符串是:"+str);
  25.                 }
  26.                 catch(Exception e)
  27.                 {
  28.                         System.out.println(e.toString());
  29.                 }        
  30.         }
  31. }
复制代码
这只是个例子,像平时的异常处理,try,catch处理了,还需要throws异常么?


作者: ehuashao    时间: 2014-5-25 11:52
throws的意思是将当前程序中的异常抛出,让它的调用者去处理。如果在当前的代码中try catch。自己处理了。就不需要再抛出了。
作者: love~陌    时间: 2014-5-25 13:14
楼上正解!异常分两种处理方式:抛出和try···catch。择其一即可,若是二者都写上,估计要报错的
作者: BigKarel    时间: 2014-5-25 15:57
不需要。两个都能处理异常,选其一
作者: 段兆洋    时间: 2014-5-25 18:59
呵呵,楼主,这个东西没这么简单 ,这么讲吧,笼统的来说,二者是选其一,但是具体应用时,不是这么简单的分的!
第一种情况:
  1. public void method() throws Exception {
  2.     try
  3.     {  ...  }
  4.     catch(Exception ex)
  5.     {    }
  6. }
复制代码

像这种情况,如果try{}中程序异常的话,将处理下面程序体中catch的地方,这个时候throws Exception 其实是没有意义的。
第二种情况:
  1. public void method() throws Exception {
  2.     try
  3.     {  ...  }
  4.     catch(FileNotFoundException ex)
  5.     {    }
  6. }
复制代码

这种情况如果try{}中程序异常的话,如果是FileNotFoundException 的情况下,将处理下面程序体中catch的地方处理,并且FileNotFoundException 以外的Exception 将通过 throws Exception ,throw到上一层。

一般情况下,我们自定义一个方法,如果出现可能存在异常的代码,是要用throw关键字来声明,完了以后一般要用throws抛出的,但是throws最多到主函数上,主函数上一般是必须要try{}catch{}的!否则会抛给虚拟机!


作者: 远行的人2号    时间: 2014-5-25 21:58
的确,择其一即可。
作者: 菠萝包丶    时间: 2014-5-26 00:23
段兆洋 发表于 2014-5-25 18:59
呵呵,楼主,这个东西没这么简单 ,这么讲吧,笼统的来说,二者是选其一,但是具体应用时,不是这么简单的 ...

哦。原来是这样。
作者: 菠萝包丶    时间: 2014-5-26 00:24
ehuashao 发表于 2014-5-25 11:52
throws的意思是将当前程序中的异常抛出,让它的调用者去处理。如果在当前的代码中try catch。自己处理了。 ...

哦哦,懂了
作者: 菠萝包丶    时间: 2014-5-26 00:25
谢谢各位的解答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2