黑马程序员技术交流社区

标题: 关于异常里面手动抛出异常对象的问题 [打印本页]

作者: 姬仁贵    时间: 2012-7-24 09:00
标题: 关于异常里面手动抛出异常对象的问题
class FuShuException extends Exception
{
private String msg;
FuShuException(String msg)
{
  this.msg = msg;
}
public String getMessage()
{
  return msg;
}
}
class Demo
{
int div(int a,int b) throws FuShuException
{
  if (b<0)
   throw new FuShuException("出现了除数为负数了 / by fushu");//这行语句开始不明白了。我知道这行语句是手动的抛出异常的一个类的对象,但是为什么里面还可以带一个参数?
                                                                                                    //这个参数传出去后又是谁来接收呢?
                                                                                                    //请教这个对象里面的参数是怎么一步一步传递的????
                  
  return a/b;
}
}
class ExceptionDemo3
{
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());//这个通过toString()自动调用异常类里面的getMessage()方法。
    System.out.println("除数出现负数了");
   }
   
   
   System.out.println("over");

}
}

//throw new FuShuException("出现了除数为负数了 / by fushu");
//这一句是不是先创建FuShuException的对象然后再调用FuShuException(String msg)这个构造方法呀?

作者: 田向向    时间: 2012-7-24 09:11
本帖最后由 田向向 于 2012-7-24 09:13 编辑

throw new FuShuException("出现了除数为负数了 / by fushu");//这行语句开始不明白了。我知道这行语句是手动的抛出异常的一个类的对象,但是为什么里面还可以带一个参数?

这句话是当你程序出现异常时,提示你是什么样的异常      出现了除数为负数了 / by fushu,

//这一句是不是先创建FuShuException的对象然后再调用FuShuException(String msg)这个构造方法呀?
当你程序出现异常时,就会手动通过throw关键字抛出自定义异常




对于异常这一块,我也不是很明白,,但是凭我的理解,大概就这么个意思。呵呵,见笑了
作者: 李菁    时间: 2012-7-24 09:22
java是把异常情况交给方法的设计者来做。在方法时处理可能发生的异常情况。
谁调用,谁处理
作者: 刘海源    时间: 2012-7-24 09:50
有谁调用就返回给谁啊 ,对于抛异常的问题就是先创建异常对象,然后让它继承Exception类,因为他是
异常的上帝奥
作者: 于星星    时间: 2012-7-24 10:13
本帖最后由 于星星 于 2012-7-24 10:18 编辑
复制代码
class FuShuException extends Exception
{
private String msg;
FuShuException(String msg)
{
  System.out.println(msg+"出现了异常调用构造方法------------");
   this.msg = msg;
}
public String getMessage()
{
   return msg;
}
}
class Demo1
{
int div(int a,int b) throws FuShuException
{
   if (b<0)
    throw new FuShuException("出现了除数为负数了 / by fushu");//这行语句开始不明白了。我知道这行语句是手动的抛出异常的一个类的对象,但是为什么里面还可以带一个参数?
   return a/b;
}
}
public class ExceptionDemo3
{
public static void main(String[] args)
{
  Demo1 d = new Demo1();
    try
    {
     int x = d.div(4,-1);
     System.out.println("x="+x);
    }
    catch (FuShuException e)//这里捕捉抛出的异常。
    {
      System.out.println(e.toString());//这个通过toString()自动调用异常类里面的getMessage()方法。
      System.out.println("除数出现负数了");
    }
   
    System.out.println("over");
}
}

//throw new FuShuException("出现了除数为负数了 / by fushu");
//这一句是不是先创建FuShuException的对象然后再调用FuShuException(String msg)这个构造方法呀?


这个先调用FuShuException的有参数构造方法,将错误信息封装在了你定义的成员变量 private String msg;中,当执行到 if (b<0)条件满足,就会抛出这个异常,在下面额主函数中抓住了这个异常,然后在里面打印

作者: 姬仁贵    时间: 2012-7-24 13:51
刘海源 发表于 2012-7-24 09:50
有谁调用就返回给谁啊 ,对于抛异常的问题就是先创建异常对象,然后让它继承Exception类,因为他是
异常的 ...

我想问的是为什么手动抛出的异常对象可以带着参数,这个参数又是具体怎么传递下去的呢?




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