面向对象----异常

面向对象—异常

Java中如何进行异常处理

  • Java的异常处理是通过5个关键字来实现的: try、catch、throw、throws
    在这里插入图片描述

日志

public void logLevel(){
    log.error("这个错误很严重,程序阻断了,要记监控,发到报警");
    log.warn("这个错误不应该出来啊,程序可以继续往下走,但是太没面子了");
    log.info("没啥事,就是想打个日志");
    log.debug("从来没用过,他们说是为了追踪");
    log.trace("从来没用过,他们说是为了追踪");
}
try-catch块5-1
  • 使用try-catch块捕获异常,分为三种情况:

    • 正常
    public void method(){
        try{
            //代码块(此处不会产生异常)
        }catch(异常类型 ex){
            //对异常进行处理的代码段
        }
        //代码段
    }
try-catch块5-2
  • 出现异常
    public void method(){
        try{
            //代码段1
            //产生异常的代码段2
            //代码段3
        }catch(异常类型 ex){
            //对异常进行处理的代码段4
        }
        //代码段5
    }

在这里插入图片描述

try-catch块5-3
  • 异常类型不匹配
    public void method(){
        try{
            //代码段1
            //产生异常的代码段2
            //代码段3
        }catch(异常类型 ex){
            //对异常进行处理的代码段4
        }
        //代码段5
    }

在这里插入图片描述

try-catch块5-4
  • printStackTrace()的堆栈跟踪功能显示出程序运行到当前类的执行流程
    在这里插入图片描述
try-catch块5-5
  • 在catch块中处理异常

    • 加入用户自定义处理信息
    System.err.println("出现错误:被除数和除数必须是整数");
    
    • 调用方法输出异常信息一般不使用了
    e.printStackTrace();
    
    • 异常对象常用的方法
    方法说明
    void printStack Trace()输出异常的堆栈信息
    String getMessage()返回异常信息描述字符串,是printStackTrace()输出信息的一部分
try-catch-finally 2-1
  • 在try-catch块后加入finally块
    • 是否发生异常都执行
    • 不执行的唯一情况
      在这里插入图片描述
try-catch-finally 2-2
  • 存在return的try-catch-finally块
    public void method(){
        try{
            //代码段1
            //产生异常的代码段2
        }catch(异常类型 ex){
            //对异常进行处理的代码段3
            return;
        }finally{
            //代码段4
        }
    }

在这里插入图片描述

多重catch块
  • 引发多种类型的异常
    • 排列catch语句的顺序:先子类后父类
    • 发生异常时按顺序逐个匹配
    • 只执行第一个与异常类型匹配的catch语句

声明异常

  • 如果在一个方法体中抛出了异常,如何通知调用者?
    throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开
    
    • 方式1:调用者处理异常
    • 方式2:调用者继续声明异常
      • main()方法声明的异常由Java虚拟机处理
抛出异常
  • 除了系统自动抛出异常外,有些问题需要程序员自行抛出异常

    • 使用throw抛出异常
    • throw与throws
    throwthrows
    生成并抛出异常声明方法内抛出了异常
    位于方法体内部,可作为单独语句使用必须跟在方法参数列表后面,不能单独使用
    抛出一个异常对象,且只能是一个声明抛出异常类型,可以跟多个异常
异常体系结构

在这里插入图片描述

自定义异常

  • 当JDK中的异常类型不能满足程序的需要时,可以自定义异常类
  • 使用自定义异常的步骤
      1. 定义异常类 继承Throwable类、继承Excepion 或者RuntimeException
      1. 编写构造方法,继承父类的实现
      1. 实例化自定义异常对象
      1. 使用throw抛出

异常链

  • A方法调用B方法时,B方法却抛出了异常.那A方法继续抛出原有的异常还是抛出一个新异常呢?
    • 抛出原有的异常
      • A方法与B方法进行了关联,不便于代码的修改和扩展
    • 抛出新的异常
    异常链创建了新的异常但却保留了原有异常的信息
    

异常处理原则

  • 异常处理与性能
  • 异常只能用于非正常情况
  • 不要将过于庞大的代码块放在try中
  • 在catch中指定具体的异常类型
  • 需要对捕获的异常做处理

总结

  • 异常为Checked异常和运行时异常
    • Checked异常必须捕获或者声明抛出
    • 运行时异常不要求必须捕获或者声明抛出
  • try-catch-finally中存在return语句的执行顺序
  • finally块中语句不执行的情况
  • throw和throws关键字的区别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值