黑马程序员技术交流社区

标题: 大家帮我看一下异常的问题 [打印本页]

作者: 杨希    时间: 2014-4-4 11:14
标题: 大家帮我看一下异常的问题
本帖最后由 杨希 于 2014-4-4 11:23 编辑

代码如下


  1. class FuShuException extends Exception
  2. {}
  3. class Demo
  4. {
  5.         int div(int a,int b)throws FuShuException
  6.         {
  7.                 if (b<0)
  8.                         throw new FuShuException();
  9.                
  10.                 return a/b;
  11.         }        
  12. }
  13. class ExceptionDemo
  14. {
  15.         public static void main(String args[])
  16.         {
  17.                 Demo d = new Demo();
  18.                 try
  19.                 {
  20.                         int x = d.div(4,-1);
  21.                         System.out.println("x="+x);
  22.                 }
  23.                 catch(FuShuException e)
  24.                 {
  25.                         System.out.println(e.toString());
  26.                         System.out.println(e.getMessage());
  27.                 }
  28.                
  29.                 System.out.println("over");
  30.         }
  31. }



复制代码




1,当b=0时,抛出异常e.toString()和e.getMessage(),得到的结果一样,getMessage()不是返回的是throwable的详细消息字符串,toString返回的是throwable的简短描述吗?两个结果都是这个
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Demo.div(ExceptionDemo.java:10)
        at ExceptionDemo.main(ExceptionDemo.java:20)




2,当b<0时,
e.toString()的结果是 :
FuShuException
over

e.getMessage()的结果是  :
null
over

能帮我具体解释一下吗?谢谢了!






作者: caijunsong    时间: 2014-4-4 12:32
本帖最后由 caijunsong 于 2014-4-4 12:37 编辑

  1. class FuShuException extends Exception
  2. {
  3. // super("除数不能为负数");//要给父类的Message赋值,没有的话,那就是默认的null。
  4. }

  5. class Demo

  6. {

  7. int div(int a,int b)throws FuShuException

  8. {

  9. if (b<0)

  10. throw new FuShuException();



  11. return a/b;

  12. }

  13. }

  14. class ExceptionDemo

  15. {

  16. public static void main(String args[])

  17. {

  18. Demo d = new Demo();

  19. try

  20. {

  21. int x = d.div(4,-1);

  22. System.out.println("x="+x);

  23. }

  24. catch(FuShuException e)//处理算术异常是,记得给成Exception
  25. {
  26. System.out.println(e.toString());

  27. System.out.println(e.getMessage());

  28. }
  29. System.out.println("over");

  30. }

  31. }

  32. //在你这个处理块中,只能针对FuShuException异常进行处理,假如你b输入的0,那么try中捕获的异常将是算术异常
  33. //try把捕获的异常交给了catch,和()中的异常比对,找不到可以处理的异常,所以没有执行的catch块,既然没有被处理只能一级级抛给了
  34. //JVM,JVM默认处理就是打印异常错误的堆栈信息,如果你想让它执行catch中的两个方法,就要把FuShuException给成Exception


  35. //toString()方法 是返回Exception in thread "main"+异常类名+getLocalizeMessage(),如果你的定义的异常类没有用super(String)给Message赋值,那么就是返回null
  36. //如果getLocalizeMessage返回null toString就打印Exception in thread "main"+异常类名
  37. //你定义的FuShuException没有用super()初始化吗?所以抛出异常处理的时候toString打印了类名,而getMessage不就是null,左后的over



复制代码

  1. <BLOCKQUOTE>
复制代码


作者: 杨希    时间: 2014-4-4 13:25
caijunsong 发表于 2014-4-4 12:32

非常感谢,也就是我在继承父类Exception的异常的时候没有定义getMessage()和toString(),catch的FuShuException找不到这两个的处理方式,是这个意思吧?
作者: caijunsong    时间: 2014-4-7 12:21
杨希 发表于 2014-4-4 13:25
非常感谢,也就是我在继承父类Exception的异常的时候没有定义getMessage()和toString(),catch的FuShuExc ...

不对   私聊吧  752541086
作者: 杨希    时间: 2014-4-8 15:44
caijunsong 发表于 2014-4-7 12:21
不对   私聊吧  752541086

谢谢亲,好耐心,我懂了哈~




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