黑马程序员技术交流社区

标题: 初学异常,为什么自定义异常不能继承Exception? [打印本页]

作者: 杨闯    时间: 2013-4-13 11:16
标题: 初学异常,为什么自定义异常不能继承Exception?
本帖最后由 杨闯 于 2013-4-14 09:49 编辑

class FuShuException extends Exception{
}
class Demo{
     int div(int a,int b) throws FuShuException{
     if(b<0)
         throw new FuShuException();//手动通过throw关键字抛出一个自定义异常对象。
     return a/b;
      }
}

public class Exception123 {
       public static void main(String[] args) {
            Demo d=new Demo();
            try{
                 int x=d.div(4, -1);
                 System.out.println("x="+x);
        }catch(FuShuException e){
              System.out.println(e.toString());
              System.out.println("被除数出现负数了!");
  }
  
  System.out.println("over!");
}
}

如上所示,自定义了异常FuShuException继承了Exception,
然后就出现了下面的错误

第一行将自定义异常FuShuException继承于Throwable后问题解决


求教各位同学,跟着毕老师手把手打的代码,为什么就出现不同的结果呢,不是因为人品吧?


作者: 梁航斌    时间: 2013-4-13 11:38
奇怪复制了你的代码,我的能运行啊。
作者: ld5128702    时间: 2013-4-13 11:45
是可以继承Exception的,通常就是继承Exception或者RuntimeException,运行了你的代码,表示可以通过,最后给你点小建议,建议你大括号的格式规范一下,因为有时候就可能导致错误,而且不好阅读啊。
作者: Asan    时间: 2013-4-13 12:17
class FuShuException extends Exception{ //处理异常的方法呢?
}
class Demo{
      int div(int a,int b) throws FuShuException{//
      if(b<0)
          throw new FuShuException();//手动通过throw关键字抛出一个自定义异常对象。
      return a/b;//如果b<0;你还return a/b;
       }
}

public class Exception123 {
        public static void main(String[] args) {
             Demo d=new Demo();
             try{
                  int x=d.div(4, -1);
                  System.out.println("x="+x);
         }catch(FuShuException e){
               System.out.println(e.toString());
               System.out.println("被除数出现负数了!");
   }
   
   System.out.println("over!");
}
}
作者: 李易烜    时间: 2013-4-13 12:21
你抛出异常后,怎么能有返回呢?
这里改成如下:
  1.                 if (b < 0) {
  2.                         throw new FuShuException();// 手动通过throw关键字抛出一个自定义异常对象。
  3.                 } else {
  4.                         return a / b;
  5.                 }
复制代码

作者: 杨闯    时间: 2013-4-13 15:49
李易烜 发表于 2013-4-13 12:21
你抛出异常后,怎么能有返回呢?
这里改成如下:

恩,感谢解答,程序抛出异常后是不会执行下面那句return语句的,只有b>0时候才会执行到
作者: 杨闯    时间: 2013-4-13 15:50
Asan 发表于 2013-4-13 12:17
class FuShuException extends Exception{ //处理异常的方法呢?
}
class Demo{

恩,感谢解答,程序抛出异常后是不会执行下面那句return语句的,只有b>0时候才会执行到

作者: 杨闯    时间: 2013-4-13 15:51
ld5128702 发表于 2013-4-13 11:45
是可以继承Exception的,通常就是继承Exception或者RuntimeException,运行了你的代码,表示可以通过,最后 ...

恩。同学,谢谢你的建议,会慢慢更正滴。至于我问的,看来真是人品问题了
作者: 杨闯    时间: 2013-4-13 15:52
梁航斌 发表于 2013-4-13 11:38
奇怪复制了你的代码,我的能运行啊。

额。确实好奇怪啊,楼下的同学也说能运行,纳了闷了,最近没做啥坏事啊。。。
作者: lipingan0520    时间: 2013-4-13 16:30
Asan 发表于 2013-4-13 12:17
class FuShuException extends Exception{ //处理异常的方法呢?
}
class Demo{

f(b<0)
          throw new FuShuException();//手动通过throw关键字抛出一个自定义异常对象。
      return a/b;//如果b<0;你还return a/b

如果b<0 就抛出异常了。下面的就不执行了。
作者: Sword    时间: 2013-4-14 01:00
编译运行了一遍,表示没有问题。
感觉应该是你的代码中的括弧或者逗号的问题,你可能在汉字输入法下输入的括弧或者逗号,可以仔细检查一下{:soso_e112:}




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