A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 菠萝包丶 于 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异常么?

评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1 神马都是浮云

查看全部评分

9 个回复

倒序浏览
throws的意思是将当前程序中的异常抛出,让它的调用者去处理。如果在当前的代码中try catch。自己处理了。就不需要再抛出了。
回复 使用道具 举报
楼上正解!异常分两种处理方式:抛出和try···catch。择其一即可,若是二者都写上,估计要报错的
回复 使用道具 举报
不需要。两个都能处理异常,选其一
回复 使用道具 举报
呵呵,楼主,这个东西没这么简单 ,这么讲吧,笼统的来说,二者是选其一,但是具体应用时,不是这么简单的分的!
第一种情况:
  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{}的!否则会抛给虚拟机!

点评

要的就是你给赞 O(∩_∩)O哈哈~  发表于 2014-5-27 09:48

评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
的确,择其一即可。
回复 使用道具 举报
段兆洋 发表于 2014-5-25 18:59
呵呵,楼主,这个东西没这么简单 ,这么讲吧,笼统的来说,二者是选其一,但是具体应用时,不是这么简单的 ...

哦。原来是这样。
回复 使用道具 举报
ehuashao 发表于 2014-5-25 11:52
throws的意思是将当前程序中的异常抛出,让它的调用者去处理。如果在当前的代码中try catch。自己处理了。 ...

哦哦,懂了
回复 使用道具 举报
谢谢各位的解答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马