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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 深知一生短暂 中级黑马   /  2013-8-17 21:32  /  1556 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

异常有两种定义方式,一种是try方式,内部进行解决;另外一种是throws方式。
看资料看到,如果内部能解决的问题就使用try方式进行定义,如果内部不能解决就用throws方式。
但是我不明白,什么是内部能解决的异常,什么异常是内部不能解决的异常,这个是怎么区分的?

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

4 个回复

倒序浏览
比如说老师讲课用电脑,如果电脑蓝屏了,老师就能处理这种异常,就用try。但是如果电脑冒烟了,老师自己就不能解决了,就只能把问题抛出,这种情况下就用throws方式
回复 使用道具 举报
在可能会出现exception的地方,要使用try-catch或者throws或者两者都要。我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-catch掉这个exception;如果希望外部知道,则在catch到之后把exception直接抛出或者抛出自定义的exception。
补充一点:有些地方即使不会有exception,但是从商业逻辑上是错误的、非预期的,也可以抛出user exception。例如,用户输入非法,bank account非法透支等等
回复 使用道具 举报
求例子,什么情况下是内部不能解决的?
回复 使用道具 举报
本帖最后由 许云龙 于 2013-8-18 16:01 编辑
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;

  3. /*
  4. * 假设你编写一个计算器程序用到除法运算,要求:10除以任何数,
  5. * 让用户输入除数,当用户输入0的时候你就可以抛出异常告诉用户除数不可以为0,让
  6. * 程序停止,但是这种情况只是假设,实际情况中是可以限制用户输入的。
  7. * 就以这个假设为例,简单演示代码
  8. * */
  9. public class ClassIs3 {
  10.         public static void main(String[] args)throws Exception{
  11.                 //利用缓冲读取键盘录入
  12.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));        
  13.                 int num = 0;
  14.                 String line = null;
  15.                 while(true){
  16.                         line = bufr.readLine();
  17.                         num = Integer.parseInt(line);
  18.                         if(num == 0)
  19.                                 throw new RuntimeException("除数不能为0");
  20.                         
  21.                         System.out.println(10/num);
  22.                 }
  23.         }

  24. }
复制代码
-----------------------希望我的回答对你能有所帮助-------------------------
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马