A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ozt6719393 中级黑马   /  2013-5-22 17:26  /  1336 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如何自定义异常类

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

2 个回复

倒序浏览
  自定义异常 :
一般有以下几个步骤:   
一:创建一个类继承于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();
     }     
}

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马