黑马程序员技术交流社区

标题: 自定义异常 [打印本页]

作者: 尹善波    时间: 2012-8-2 00:24
标题: 自定义异常

//自定义异常,必须继承父类异常,如果要定义多个异常呢,还是向下面每个自定义异常都要封装吗
//还是在一个类中定义,

class FuShuException extends Exception //
{
private int value;
FuShuException()
{
  super();
}
FuShuException(String msg,int value)
{
  super(msg);//调用父类方法,运行的是父类方法,再抛出异常的时候。还是从父类中调用的吗?
  this.value = value;
}
public int getValue()
{
  return value;
}
}

class Demo
{
int div(int a,int b)throws FuShuException//这里可不可以抛出他的父类异常,解释下
{
  if(b<0)//这里b=0也不好吧

   throw new FuShuException("出现了除数是负数的情况------ / by fushu",b);//  
  return a/b;
}
}

class  ExceptionDemo3
{
public static void main(String[] args)
{
  Demo d = new Demo();
  try
  {
   int x = d.div(4,-9);
   System.out.println("x="+x);  
  }
  catch (FuShuException e)
  {
   System.out.println(e.toString());
   
   System.out.println("错误的负数是:"+e.getValue());
  }
  
  
  System.out.println("over");
}
}

作者: 周坤    时间: 2012-8-2 01:37
1.感觉自定义异常应该是提醒自身出现了某种特定异常状况,然后根据异常来解决问题。
2.抛出异常,也是要new出一个实例对象,当然自定义的异常类要从父类调用了,继承嘛
3.可以直接抛出Exception异常,因为下面抛出的throw new FuShuException("出现了除数是负数的情况------ / by fushu",b);是Exception的子类,发生了一个小异常,函数体抛出了一个大异常,系统的作用是不漏掉异常就好,多了自然没有关系。但是抛多了,后面主函数里catch就要捕获多余的异常了。
int div(int a,int b)throws FuShuException,直接抛出FuShuException,当a=0,会系统会发生的异常。不会运行到over。
而如果int div(int a,int b)throwsException,后面catch了Exception,那么当a=0时,就可以捕捉到这个异常,那么也可以运行到over。


作者: 侯宪博    时间: 2012-8-2 09:20
首先,自定义的异常一般是为了解决特殊需求
例如:楼主的例子中的负数异常
也就是有这个需求才定义这个异常
其次是为什么要用类封装
因为异常要具有可抛性,想具有可抛性就需要成为Throwable体系中的一员
而Throwable体系下有两大派系那就是Exception和Error
所以既然你是个异常就需要继承Exception
另一方面你的自定义异常是需要面临特殊状况下的异常的
这就需要当这个情况出现的时候在方法中抛出该异常的对象
所以,每有一个特殊异常的需求,就需要为该需求单独封装一个异常类
关于调用父类方法的那个地方其实不是异常的知识
是继承的知识
因为父类已经提供了传入异常信息的构造函数和获取异常信息的方法
所以子类无需自己定义只需将信息接受直接传给父类即可
这样子类就可以不在自己类中定义获取异常信息的方法(如果这个看不懂,去看看继承的视频和资料)
还有可不可以在特殊异常发生时抛出Exception
是可以的,但是不提倡,可以抛是因为类的多态性
因为Exception是自定义异常的父类,他们之间的关系是is a关系
也就是说FushuException(负数异常)是一个Exception(异常)
但是不便于使用者的异常异常抓取
你想想你在一个类中抛出了一个负数异常,而你抛出的却是异常
人家在调用这个方法的时候只知道你会出现异常,却不知道会出现什么异常
那你的自定义异常岂不白定义了
作者: 尹善波    时间: 2012-8-2 09:42
看来还要继续努力啊





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