黑马程序员技术交流社区

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

作者: ozt6719393    时间: 2013-5-22 17:26
标题: 如何自定义异常类
如何自定义异常类
作者: 余威宏    时间: 2013-5-22 18:16
  自定义异常 :
一般有以下几个步骤:   
一:创建一个类继承于Throwable或其子类;   
二:添加构造方法;     
三:在一个方法中使用throw抛出异常   
四:在另一个方法中捕获并处理异常
举个例子,算术错误,除数不能为零的自定义异常:
class MyArithmeticException extends ArithmeticException{
     public MyArithmeticException(){
      public MyArithmeticException(String errorDescription){
     super(errorDescription);
}
    }
}

public static int divide(int a,int b) throws MyArithmeticException{
     int result;
      if (b==0)
     throw new MyArithmeticException("divide by zero");
      else   result=a/b;
      return result;
}
public static void main(String args[ ]) {
     try{     divide(10,0);
     }
catch(userException e) {
          e.printStackTrace();
     }     
}

作者: 高波    时间: 2013-5-22 20:27
  1. package exception;

  2. /*
  3. * 因为项目中会出现特有的问题,而这些问题并没有被java所描述并封装对象。
  4. * 所以对这些特有问题可以按照java的对问题封装思想,将特有的问题,进行自定义的异常封装。
  5. *
  6. * 自定义异常:
  7. * 假定需求:在本程序中,对于除数是负数,也视为是错误的是无法进行运算的。
  8. * 那么就要对这个问题进行自定义的描述。
  9. * 自定义异常java没有描述不能自动抛出,只能手动抛出。
  10. *
  11. * 当在函数内部出现throw抛出异常对象,那么必须要给出对应的处理动作。
  12. * --要么在内部try catch处理
  13. * --要么在函数上声明让调用者处理
  14. *
  15. * 一般情况,在函数内出现异常,函数上需要声明。
  16. *
  17. * 发现打印的结果中只有异常的名称,却没有异常的信息:因为自定义的异常并没有定义信息。
  18. * 如何定义异常信息呢?
  19. * 因为父类中已经把异常信息的操作都完成了。所以子类只要在构造时,通过super语句将异常信息传递给父类
  20. * 那么就可以直接通过getMessage方法获取自定义的异常信息了。
  21. *
  22. * 自定义异常:
  23. * 必须是自定义继承Exception
  24. *
  25. * 继承Exception原因:
  26. * 异常体系有一个特点:因为异常类和异常对象都被抛出。
  27. * 他们都具备可抛性。这个可抛性是Throwable这个体系中独有的特点。
  28. * 只有这个体系中的类和对象才可以被throws和throw操作。
  29. *
  30. * throws和throw的区别:
  31. * --throws使用在函数上。
  32. * --throw使用在函数内。
  33. *
  34. * throws后面跟的异常类。可以跟多个。用逗号隔开。
  35. * throw后面跟的是异常对象。
  36. */

  37. @SuppressWarnings("serial")
  38. class FuShuException extends Exception {
  39.         @SuppressWarnings("unused")
  40.         private String msg;
  41.         private int value;

  42.         // FuShuException(String msg) {
  43.         // this.msg = msg;
  44.         // }
  45.         //
  46.         // public String getMessage() {
  47.         // return msg;
  48.         // }
  49.         FuShuException(String msg, int value) {
  50.                 super(msg);
  51.                 this.value = value;
  52.         }

  53.         public int getvalue() {
  54.                 return value;
  55.         }
  56. }

  57. class DivDemo {
  58.         int div(int a, int b) throws FuShuException {
  59.                 if (b < 0)
  60.                         throw new FuShuException("出现了除数是负数的情况 / by FuShu", b);// 手动通过throw关键字抛出一个自定义异常
  61.                 return a / b;
  62.         }
  63. }

  64. public class SelfDefineException {
  65.         public static void main(String[] args) {
  66.                 DivDemo dd = new DivDemo();
  67.                 try {
  68.                         int x = dd.div(4, -1);
  69.                         System.out.println("x=" + x);
  70.                 } catch (FuShuException e) {
  71.                         System.out.println(e.toString());
  72.                         // System.out.println("除以负数了");
  73.                         System.out.println("出现异常的数是: " + e.getvalue());
  74.                 }
  75.                 System.out.println("over");
  76.         }
  77. }
复制代码





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