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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class ExceptionTest   
  2. {
  3.         public static void main(String args[])
  4.         {
  5.                 ShuXue s = new ShuXue();
  6.                 try
  7.                 {
  8.                         int x = s.div(-8,-4);
  9.                         System.out.println(x);
  10.                 }
  11.                 catch (FuShuException e)
  12.                 {
  13.                         System.out.println("已经解决被除数为负数的异常了!!");
  14.                 }
  15.                 catch (FuShuTwoException e)
  16.                 {
  17.                         System.out.println("已经解决除数为负数的异常了! -_-");
  18.                 }
  19.                 System.out.println("over");

  20.         }

  21. }

  22. class ShuXue
  23. {

  24.         public int div(int num1,int num2) throws  FuShuException,FuShuTwoException
  25.         {
  26.                 if(num1<0)
  27.                         throw new FuShuException();
  28.                 else if (num2<0)
  29.                         throw new FuShuTwoException();
  30.                 return num1/num2;
  31.         }
  32. }



  33. //规定被除数不能为负数
  34. class FuShuException extends Exception
  35. {

  36. }

  37. //除数不能为负数
  38. class FuShuTwoException extends Exception
  39. {

  40. }
复制代码

有三个类文件,我想问下我这段代码的功能是想判断除数和被除数是否都为负数,如果是进行异常捕获处理,但是实际出来的效果是他只捕获了一个,另外的一个catch没有去解决,这样子即使运行了下面的输出over命令他也只解决了一个问题啊
所以我想问下怎么同时让两个catch中的语句都得到执行,难道要在第一个catch中去判断另外一个条件是否成立么?还是改下ShuXue类中的抛出异常条件即可?

评分

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

查看全部评分

12 个回复

倒序浏览
那要满足你定义的两个异常的异常信息。
回复 使用道具 举报
程序抛 异常 说明程序 运行出现了错误。 既然程序出现了错误,那程序就会 终止, 而 java的 异常机制是,虽然程序停止了,但是我 帮你获得错误的 原因并且抛出。
也就是说 , 你的 程序 只会 捕捉到 一个 异常,尽管你 声明了 捕捉多个异常, 因为只要程序出现一个 异常,该代码块就会 终止。 所以 不会存在 同时 抛出 多个异常的 情况
回复 使用道具 举报
本帖最后由 张然龙 于 2014-5-2 19:08 编辑

在这种情况是可以 捕获两个的! 为了满足楼主的需要我只能这么做了!在开发中没有人这么干!
代码如下↓


  1. class Demo3   
  2. {
  3.         public static void main(String args[])
  4.         {
  5.                 ShuXue s = new ShuXue();
  6.                 try
  7.                 {
  8.                         int x = s.div(-8,-4);
  9.                         System.out.println(x);
  10.                 }
  11.                 catch (FuShuException e)
  12.                 {
  13.                         System.out.println("已经解决被除数为负数的异常了!!");
  14.                         try
  15.                         {
  16.                                 int x = s.div(-8,-4);
  17.                                 System.out.println(x);
  18.                         }
  19.                         catch (FuShuTwoException l)
  20.                         {
  21.                                 System.out.println("已经解决除数为负数的异常了!!");
  22.                         }
  23.                         catch (FuShuException l)
  24.                         {
  25.                                 System.out.println("已经解决被除数为负数的异常了!!");
  26.                         }
  27.                 }
  28.                 catch (FuShuTwoException e)
  29.                 {
  30.                         System.out.println("已经解决除数为负数的异常了! -_-");
  31.                 }
  32.                 System.out.println("over");
  33.         }
  34. }
  35. class ShuXue
  36. {
  37.         public int div(int num1,int num2) throws  FuShuException,FuShuTwoException
  38.         {
  39.                 if(num1<0)
  40.                         throw new FuShuException();
  41.                 else if (num2<0)
  42.                         throw new FuShuTwoException();
  43.                 return num1/num2;
  44.         }
  45. }
  46. //规定被除数不能为负数
  47. class FuShuException extends Exception
  48. {
  49. }
  50. //除数不能为负数
  51. class FuShuTwoException extends Exception
  52. {
  53. }
复制代码


点评

你扣扣是啥了 加个好友呗  发表于 2014-5-2 19:18

评分

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

查看全部评分

回复 使用道具 举报
张然龙 发表于 2014-5-2 19:05
在这种情况是可以 捕获两个的! 为了满足楼主的需要我只能这么做了!在开发中没有人这么干!
代码如下↓

哥们没代码啊。。。你qq是傻
回复 使用道具 举报
hx小龙 发表于 2014-5-2 19:08
哥们没代码啊。。。你qq是傻

不是 这个贴代码这个一直用着很不舒服。。。现在有了
回复 使用道具 举报
XinWen 发表于 2014-5-2 18:47
程序抛 异常 说明程序 运行出现了错误。 既然程序出现了错误,那程序就会 终止, 而 java的 异常机制是,虽 ...

嗯,对啊 可能我口误了,完善点说应该说是可以抛出多种情况的异常,那假如我在开发一个两个正数除法器,要保证两个都是正数,也就是我这个程序了。按照java来说的,现在只是处了了一个被除数为正数的异常机制,那除数呢?处理完被除数了,除数还是没修改啊?但是程序以前忽略了除数修改的catch块,转而继续执行下一个句代码了!
这样子的需求可能在开发中会出现吧?那时候应该怎么写代码呢?
回复 使用道具 举报
张然龙 发表于 2014-5-2 19:05
在这种情况是可以 捕获两个的! 为了满足楼主的需要我只能这么做了!在开发中没有人这么干!
代码如下↓

QQ是631826554  不过不怎么常上  呵呵!

点评

我觉着那么抛也不好啊,不知道有没有更好的办法。那么抛得事先知道要传进来的值,不知道有木有更好的办法啊  发表于 2014-5-2 19:26
回复 使用道具 举报
张然龙 发表于 2014-5-2 19:05
在这种情况是可以 捕获两个的! 为了满足楼主的需要我只能这么做了!在开发中没有人这么干!
代码如下↓

我还是 觉得 他只能 抛 一个异常呢 , 兄弟 麻烦 你 说说你的思路, 我的 思路是, 无论你 怎么捕捉 都穿 负数的话,  div 代码肯定会 停在 抛第一个 异常的 地方, 他不会 继续 执行下去了
回复 使用道具 举报
事实是这么回事, 如果你抛异常了 那说明你这个int x = s.div(-8,-4); 就根本没有必要运行下去了,就要在catch中将代码出现的异常解决掉,这样势必会导致你刚才调用的方法停止,如果你想两个问题都解决,那么你就一个try  一个抛  分开写,不要写一起。
回复 使用道具 举报
hx小龙 发表于 2014-5-2 19:12
嗯,对啊 可能我口误了,完善点说应该说是可以抛出多种情况的异常,那假如我在开发一个两个正数除法器, ...

哦 , 我明白你的 意思了,  这个问题 真 绕。 我理理 思路 跟你说: 个人意见是: 首先 Java 中的异常 有两种, 一种是 在程序中可处理的 异常, 一种是 在程序中不可处理的异常。 什么是 在程序中不可处理的 异常, 像  除数 为 0 的这种 最基本的 计算 正确性 要求。 就是说 如果计算机在运行的过程中,连这种错误 都有的话,那么这个计算机系统就没有必要再 运行下去了。也就是说 不要在 程序中处理这个异常, 而是 应该停下  机器由  计算机的管理员 或程序的编写者 来 修复这个异常。
我的 理解是:像你 那个 div 代码的 要求 就该停下来 重新 修改代码,而不是在程序中 处理这个异常。

接着 你说 只处理了 一个 异常, 其实你的 div 程序在运行的 时候 只 发生了 一个 异常 就终止了。他没有发生第二个异常,所以也就 无从 谈  处理 第二个异常。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马