黑马程序员技术交流社区

标题: 求解~! [打印本页]

作者: 黄湘怡    时间: 2011-11-8 22:08
标题: 求解~!

  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

怎么才能执行到这样的结果呢?
作者: 海林    时间: 2011-11-8 23:03
我查了一下Exception的源代码,它里面是这样写的public Exception(String message) {
        super(message);
    } 就是说会调用 Throwable 类里的这个方法public Throwable(String message) {
        fillInStackTrace();
        detailMessage = message;
    }
这里他把参数给了 detailMessage  这是用于网堆栈信息里填写的信息,而并非用此信息构建。这样的话那句话就结束了。因为main函数中捕获到了异常所以到catch语句中去了  所以打印的上面的信息。而并非是你所想得。
作者: 柴亚飞    时间: 2011-11-8 23:07
不能为负数-------55555
传递给了FuException(String ms)中的ms,ms并没有被你打印,而是作为Exception中的一个变量值(好像是Exception的message)。你可以通过更改  
System.out.println("222222============");为System.out.println(e.message)。(实在是忘了具体的字段名或是方法名)。
总之,“不能为负数-------55555”自始至终都没有打印语句输出。它在你构造FuException(String ms)的时候变成了一个属性,Exception中有可以得到这个属性的字段或方法。你找到包含这个字符串信息的属性或方法,再打印出这个信息就可以了。打印语句的具体位置就是“222222=======”的位置。



   
作者: 王振宇    时间: 2011-11-8 23:20
catch(FuException e)

39.                {

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

42.                }

作者: 石宗银    时间: 2011-11-9 00:43
e.printStackTrace();     打印 异常提示信息,和跟踪栈




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2