Chp15-异常

异常

概念:程序执行过程中不正常的情况

分类

  1. Throwble:总父类,表示不正常的情况
  2. Error:错误
  • 无法解决也无法提前避免的问题
  • 通常由硬件设备或内存等问题导致
  1. Exception:异常
  • 可以解决或提前避免的问题
  • 通常由代码导致
  • RuntimeException:运行时异常,也称为未检查异常、未检异常等
    - 编译不报错,运行报错
    - 可以处理也可以不处理
    - java.lang.ArrayIndexOutOfBoundsException:数组下标越界
    - java.lang.StringIndexOutOfBoundsException:字符串下标越界异常
    - java.lang.IndexOutOfBoundsException:下标越界异常
    - java.lang.NullPointerException:空指针异常
    - java.lang.ClassCastException:类型转换异常
    - java.lang.NumberFormatException:数据类型转换异常
    - java.lang.Arithm eticException:数学运算异常
    - …
    - 都来自于java.lang包
  • 非RuntimeException: 非运行时异常,也称为已检查异常、已检异常等
    - 编译就会报错
    - 必须处理
    - 只要不是运行时异常,就一定是非运行时异常

异常的产生

  1. 自动产生:当运行到有问题的代码时会自动产生异常,程序终止
  2. 手动产生:
throw 异常对象;

位置:方法内部

  • 作用:当程序执行到该语句,则会抛出一个异常对象,使程序强制终止
  • 使用: 同一直属范围内,下方不可存在其他有效语句
    • 无法执行

程序终止执行:

  1. 代码正常运行结束
  2. 执行异常
  3. 执行到return;

异常的处理

  1. 上抛异常:消极处理
 访问修饰符 返回值类型 方法名(形参列表)throws 异常类名1,异常类型2,..{
       
   }

作用:将当前方法的内部异常向上抛至调用者,当前方法无法处理该异常,此时异常并不会被根治,如果异常最终上抛至虚拟机,则仍然会导致程序终止

  • 使用 :
    1. 上抛父类异常也可以处理内部的子类异常
      2. 调用者需要处理解决的异常类型由throws上抛的类型决定

throw和throws的区别:

  1. 位置:throw写在方法内部,throws写在方法声明处
  2. 作用:throw是抛出制造异常,throws是上抛解决异常
  1. 捕捉并解决异常:积极处理
try{
       //有可能出现异常的代码
   }catch(有可能匹配的异常类名 引用名){
      // 对应的处理方案
   }
  • 特点:可以根治异常问题,如果异常正常匹配成功,则程序会继续向下执行
  • 使用:
    1. 当try中内容出现异常时,会立即开始匹配catch块,如果catch块匹配成功则程序继续执行,如果失败,则异常仍会出发程序仍然终止
    2. 可以存在多个catch块,自上而下的进行匹配
    3. 一个try-catch结构至多执行一个catch块
    4. 父类异常类型可以兼容匹配子类异常
    5. 父类异常需要写在子类异常之下
    6. 为了保证匹配一定成功,通常会在catch最下方匹配一个Exception
    7. 如果发生的是非运行时异常,则catch块无法捕捉与其无关的非运行时异常,编译报错
  • 异常信息处理
    1. String getMessage():获取异常的详细信息
    2. void printStackTrace():打印输出异常的追栈(追踪)信息(异常类型+异常的详细信息+异常的触发位置)
  1. finally快
    • 特点:无论如何都会执行,通常用来关闭资源
    • 语法
 try{
         
     }catch(){
         
     }finally{
         
     }
  • 使用:
    1. 必须与try结合使用,无法与catch单独结合
    2. 当try-catch-finallly中出现return语句冲突时,优先执行finally

自定义异常

  1. 运行时异常
    • 需要提供有参构造给最大父类Throwable中的详细信息属性赋值
package com.by.exception;
   
   /**
    * 自定义运行时异常类
    */
   public class MyRuntimeException extends RuntimeException{
       public MyRuntimeException(){
   
       }
   
       public MyRuntimeException(String message) {
           super(message);
       }
   }
  1. 非运行时异常:继承Exception

    • 构造要求与运行时异常一致
  package com.by.exception;
   
   /**
    * 自定义非运行时异常
    */
   public class MyException extends Exception{
       public MyException(){}
   
       public MyException(String message) {
           super(message);
       }
   }

今日掌握

  1. 异常的完整分类
  2. throw和throws的区别
  3. try-catch-finally的使用
  4. 自定义异常的写法
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值