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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄湘怡 黑马帝   /  2011-11-8 22:08  /  1732 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. class FuException extends Exception
  2. {
  3.        
  4.         FuException(String ms)
  5.         {
  6.                 super(ms);
  7.                 System.out.println("111111111================");
  8.                
  9.         }

  10. }

  11. class Demo
  12. {
  13.         int div(int a,int b) throws FuException
  14.         {
  15.                
  16.                 System.out.println("-------------");
  17.                 if(b <0)
  18.                 {
  19.                         System.out.println("++++++++++++++");
  20.                         throw new FuException("不能为负数-------55555");
  21.                 }
  22.                 return a/b;
  23.         }
  24. }

  25. class  ExceptionDemo
  26. {
  27.         public static void main(String[] args)
  28.         {       
  29.                 Demo d = new Demo();
  30.                 try{
  31.        
  32.                         int num = d.div(3,-1);
  33.                         System.out.println("num = "+num);
  34.                 }
  35.                 catch(FuException e)
  36.                 {
  37.                         System.out.println("222222============");
  38.                         System.out.println("不能为负数");
  39.                 }
  40.                
  41.                         System.out.println("over");
  42.                
  43.         }
  44. }
复制代码
运行结果是:-------------
            ++++++++++++++
            111111111========
            222222============
            不能为负数
             over

我想要的结果是:-------------
            ++++++++++++++
            111111111========
            不能为负数-------55555
             over

怎么才能执行到这样的结果呢?

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

4 个回复

倒序浏览
我查了一下Exception的源代码,它里面是这样写的public Exception(String message) {
        super(message);
    } 就是说会调用 Throwable 类里的这个方法public Throwable(String message) {
        fillInStackTrace();
        detailMessage = message;
    }
这里他把参数给了 detailMessage  这是用于网堆栈信息里填写的信息,而并非用此信息构建。这样的话那句话就结束了。因为main函数中捕获到了异常所以到catch语句中去了  所以打印的上面的信息。而并非是你所想得。

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

回复 使用道具 举报
不能为负数-------55555
传递给了FuException(String ms)中的ms,ms并没有被你打印,而是作为Exception中的一个变量值(好像是Exception的message)。你可以通过更改  
System.out.println("222222============");为System.out.println(e.message)。(实在是忘了具体的字段名或是方法名)。
总之,“不能为负数-------55555”自始至终都没有打印语句输出。它在你构造FuException(String ms)的时候变成了一个属性,Exception中有可以得到这个属性的字段或方法。你找到包含这个字符串信息的属性或方法,再打印出这个信息就可以了。打印语句的具体位置就是“222222=======”的位置。



   

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

回复 使用道具 举报
catch(FuException e)

39.                {

40.                        System.out.println("222222============");
                           //加上下面这句就可以打出"不能为负数-------55555"
                            e.toString();
41.                        System.out.println("不能为负数");

42.                }
回复 使用道具 举报
e.printStackTrace();     打印 异常提示信息,和跟踪栈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马