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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 易杰 中级黑马   /  2013-4-21 11:16  /  1837 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 易杰 于 2013-4-21 23:38 编辑

在声明方法一个时
方法体中的代码会有异常,这时异常是使用try/catch在方法体中捕获,还是声明方法时使用throws往外抛。。
为什么?

评分

参与人数 1黑马币 +3 收起 理由
张熙韬 + 3

查看全部评分

8 个回复

倒序浏览
try.catch后面可以跟处理异常的代码,是由自己来处理,throw只是抛出异常,由调用方处理,也就是往上抛让更外面的catch处理,如果都没有代码处理,则整个程序异常,并运行结束

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
一般都是throw外抛
回复 使用道具 举报
抛出异常
在函数上通过throws声明异常,提高安全性,让调用者进行处理,否则编译失败。
调用者可继续抛出异常,或try处理问题。

声明异常时,要声明更为具体的异常,使处理可以更具体。
声明几个异常,就对应几个catch块,不要定义多余的catch块。多个catch块中异常若出现了继承
关系,父类异常catch块放在最下面。

  1.         int div(int a,int b)throws Exception//在函数上通过throws关键字声明该功能可能有问题,由调用者进行处理。
  2.                                                 //throws 异常1,异常2        :声明多个异常
  3.         {
  4.                 return a/b;
  5.         }
  6. }

  7. class ExceptionDemo
  8. {
  9.         public static void main(String[] args)//调用者throws Exception继续抛出问题或通过try处理问题
  10.         {
  11.                 Demo d = new Demo();
  12.                 //使用try格式处理问题
  13.                 try
  14.                 {
  15.                         int x = d.div(4,0);
  16.                         System.out.pritln("x="+x);
  17.                 }
  18.                 catch (Exception e)//Exception e = new ArithmeticException();
  19.                 {
  20.                         //多态,父类方法调用子类对象覆写
  21.                         System.out.pritln(e.toString());//对捕获异常对象调用方法处理
  22.                         System.out.pritln("除零了");       
  23.                 }
  24.                 //catch         (异常1){}分别具体处理声明的异常       
  25.                 //catch         (异常2){}
  26.                 System.out.pritln("over");
  27.                
  28.         }

  29. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
分情况的,
1.如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时也不可能抛出异常。这时只能try-catch处理。
2.当异常的发生是由操作者的操作失误引起时,希望问题发生时程序停掉后,对代码进行修正,这时就不声明出来,常见于RuntimeException及其子类。
3.其他的情况就是,你想将问题直接处理,就用try-catch;或者抛出来,函数内throw,函数上就必须throws声明出来

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
定义功能,功能内部因为传入的参数问题,导致了功能会出现问题。这时为了解决这个问题,通常,我们都会将问题通过throws声明在函数上。
目的:为了调用者在使用这个功能的时候,能明确
处理方式。也就是说throws抛出的目的是为了让调用者预先定义好问题的处理方式。
如果直接在方法体进行try cathch进行捕捉就不用在函数上进行声明了 大多都是声明往外抛给调用者,让调用者进行处理

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
总结是try还是抛:
1、必须try的情况是:继承的父类或者实现的接口的方法中没有异常抛出,那么子类在覆盖方法时也不能抛出异常。
2、一般定义父类或接口时,一般会预料到将要发生异常,却不能预料发生什么异常,此时会在函数上声明异常,即抛。如果预料到得异常是RuntimeException型的异常,那么也可以不抛。
3、在子类中实现父类或接口中声明过有异常的,则最好try。因为此时是具体实现,应该清楚会发生什么异常,所以最好try。当然也可抛,这样的话调用者就需要try了。

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
两种都可以啊,try{}catch{}是由自己来处理异常,如果是throws的话,就是自己现在不处理,交给调用方处理。
具体情况要看具体代码了,一般的话想立刻处理就try{}catch{}   不想立刻处理的就throws

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
黄玉昆 黑马帝 2013-4-21 21:56:42
9#
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马