一:基本概念

当程序中出现了某些“错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息。

二:自定义异常的步骤

  1. 定义类:自定义异常类名(程序员自己写)继承Exception或RuntimeException
  2. 如果继承类Exception,属于编译异常
  3. 如果继承RuntimeException,属于运行异常(一般来说,继承RuntimeException)

    三:自定义异常的应用实例

    当我们接收Person对象年龄时,要求范围在18-120之间,否则抛出一个自定义异常(要求继承RuntimeException),并给出提示信息。 ```java public class Test2 { public static void main(String[] args) {

    1. Scanner scanner = new Scanner(System.in);
    2. int Age = scanner.nextInt();
    3. if (!(Age >=18 && Age <=120)){
    4. throw new Person("年龄需要在18-20之间");
    5. }
    6. System.out.println("年龄范围正确");

    } } //自定义异常 //1. 一般情况下,我们自定义异常是继承 RuntimeException //2. 即把自定义异常做成 运行时异常,好处时,我们可以使用默认的处理机制 class Person extends RuntimeException{ public Person(String message) {

    1. super(message);

    } }

  1. <a name="CUX8A"></a>
  2. ### 四:throw和throws区别
  3. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/2595924/1661230697019-efb4d58f-b836-4033-b5a4-8e4896beba4a.png#clientId=uf2f01f41-a37b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=252&id=ue2cc8c72&margin=%5Bobject%20Object%5D&name=image.png&originHeight=252&originWidth=1126&originalType=binary&ratio=1&rotation=0&showTitle=false&size=115422&status=done&style=none&taskId=ub9819055-0100-4c2a-a5b3-b5953ae36ff&title=&width=1126)
  4. <a name="sQlfy"></a>
  5. ### 五:练习
  6. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/2595924/1661230612894-765c2549-1029-4501-978a-2e5a691005df.png#clientId=uf2f01f41-a37b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=589&id=ub0ba2853&margin=%5Bobject%20Object%5D&name=image.png&originHeight=589&originWidth=1415&originalType=binary&ratio=1&rotation=0&showTitle=false&size=544624&status=done&style=none&taskId=u4841c4ad-2b6e-4776-8e85-c4cdfa477a7&title=&width=1415)
  7. :::info
  8. **_分层处理异常思想_**
  9. :::
  10. ```java
  11. public class Test1 {
  12. public static void main(String[] args) {
  13. try {
  14. //先验证传入的个数
  15. if(args.length !=2){
  16. throw new ArrayIndexOutOfBoundsException("参数个数不对");
  17. }
  18. //再验证是否为整数
  19. double n1 = Integer.parseInt(args[0]);
  20. double n2 = Integer.parseInt(args[1]);
  21. //再验证算数异常
  22. double result = Cal(n1,n2);
  23. System.out.println("计算结果为:"+ result);
  24. }catch (ArrayIndexOutOfBoundsException e) {
  25. System.out.println(e.getMessage());
  26. }catch (NumberFormatException e){
  27. System.out.println("参数格式不正确");
  28. }catch (ArithmeticException e){
  29. System.out.println("算数异常");
  30. }
  31. }
  32. public static double Cal(double n1 ,double n2){
  33. return n1 / n2;
  34. }
  35. }

image.png :::info 抛出异常之后,后面的代码块不在执行
如果有 throw或者return finally才会优先输出 ::: image.png