• 第八周学习笔记DAY.1-异常


    本课目标

    了解异常概念

    理解Java异常处理机制

    会捕捉异常

    会抛出异常

    了解Java异常体系结构

    什么是异常

    异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序

    生活中,根据不同的异常进行相应的处理,而不会就此中断我们的生活

    什么是异常处理

    Java编程语言使用异常处理机制为程序提供了错误处理的能力

    Java中如何进行异常处理

    Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws

    使用try-catch块捕获异常,分为三种情况

    第一种情况:正常

    public void method(){

             try {

                      // 代码段(此处不会产生异常)

             } catch (异常类型 ex) {

                     // 对异常进行处理的代码段

             }

             // 代码段

    }

    第二种情况:出现异常

    public void method(){

             try {

                    // 代码段 1

                    // 产生异常的代码段 2

                    // 代码段 3

             } catch (异常类型 ex) {

                     // 对异常进行处理的代码段4

             }

             // 代码段5

    }

    第三种情况:异常类型不匹配

    public void method(){

            try {

                     // 代码段 1

                    // 产生异常的代码段 2

                   // 代码段 3

            } catch (异常类型 ex) {

                   // 对异常进行处理的代码段4

            }

            // 代码段5

    }

    常见的异常类型

    Exception 异常层次结构的父类

    ArithmeticException 算术错误情形,如以零作除数

    ArrayIndexOutOfBoundsException 数组下标越界

    NullPointerException 尝试访问 null 对象成员

    ClassNotFoundException 不能加载所需的类

    IllegalArgumentException 方法接收到非法参数

    ClassCastException 对象强制类型转换出错

    NumberFormatException 数字格式转换异常,如把"abc"转换成数字

    在try-catch块后加入finally块

    是否发生异常都执行

    不执行的唯一情况 中断程序,退出Java虚拟机

    存在return的try-catch-finally块

    public void method(){

             try {

                   // 代码段 1

                  // 产生异常的代码段 2

              } catch (异常类型 ex) {

                  // 对异常进行处理的代码段3

                   return;

              }finally{

                    // 代码段 4

              }

    }

    多重catch块

    引发多种类型的异常

    排列catch 语句的顺序:先子类后父类

    发生异常时按顺序逐个匹配

    只执行第一个与异常类型匹配的catch语句

    小结

    try-catch-finally结构中try语句块是必须的,catch、finally语句块均可选,但两者至少出现之一
    面试题:try-catch块中存在return语句,是否还执行finally块? 如果执行,说出执行顺序
    try-catch- finally块中, finally块唯一不执行的情况是什么?

    声明异常

    如果在一个方法体中抛出了异常,如何通知调用者?

    throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开

    方式1:调用者处理异常

    方式2:调用者继续声明异常

        main()方法声明的异常由Java虚拟机处理

    抛出异常

    除了系统自动抛出异常外,有些问题需要程序员自行抛出异常

    使用throw抛出异常

    throw与throws 

    自定义异常

    当JDK 中的异常类型不能满足程序的需要时,可以自定义异常类

    使用自定义异常的步骤

    异常链

    A方法调用B方法时,B方法却抛出了异常。那A方法继续抛出原有的异常还是抛出一个新异常呢? 抛出原有的异常
    A方法与B方法进行了关联,不便于代码的修改和扩展

    抛出新的异常
    异常链创建了新的异常但却保留了原有异常的信息

    异常处理原则

    异常处理与性能

    异常只能用于非正常情况

    不要将过于庞大的代码块放在try中

    在catch中指定具体的异常类型

    需要对捕获的异常做处理

    总结

    异常分为Checked异常和运行时异常

      Checked异常必须捕获或者声明抛出

      运行时异常不要求必须捕获或者声明抛出

    try-catch-finally中存在return语句的执行顺序

    finally块中语句不执行的情况 throw和throws关键字的区别

    try是尝试捕获程序中可能会产生的异常,当程序产生异常时,会将异常封装成一个异常对象(异常对象有很多种,比如输入不匹配异常、数组下标越界异常....)
     try捕获异常有三种情况:
     1)情况一:try里面的代码没有产生异常,那么try中就不会生成异常对象,catch中的代码就不会执行
     2)情况二:try里面的代码产生了异常,封装成异常对象,catch中的代码正好能够处理产生的这个异常,执行catch中的代码
     3)情况三:try里面的代码产生了异常,封装成异常对象,catch中的代码不能处理这个异常,catch中的代码不会执行,那么程序依然会被中断

    退出Java虚拟机的语句
    static void exit(int status):终止当前正在运行的 Java 虚拟机,status是一个非零状态码,一般写1。
    System.exit(1);

    finally语句块中的代码,最终都会执行,不管try里面有没有产生异常,产生的异常catch能不能处理,finally里的代码都会执行
    finally里代码块唯一不执行的情况:在try或者catch中有存在退出java虚拟机的语句

    public static void main(String[] args) throws Exception {
    调用声明了Exception异常的方法m1()
    方式一:调用者通过try-catch处理异常
     try {
     m1();
     } catch (Exception e) {
     throw new RuntimeException(e);
     }

    方式二:调用者继续声明异常,main()方法声明的异常由Java虚拟机处理
    m1();


    }

    对于异常操作,你以后调用一个声明了异常的方法,要么你进行try-catch处理异常,要么你继续声明异常给main()方法,这两个操作都可以通过点击鼠标实现

  • 相关阅读:
    Python(七) 元组
    一图多码如何分解?快速做二维码解码的方法
    Unity UI制作
    Dom操作指南
    docker 安装 Sql Server
    .NET6接入Skywalking链路追踪完整流程
    驱动操作控制LED灯
    一些常见的必须会的谭浩强基本代码大全也是常考的应试是没问题的
    2022高教社杯思路汇总A题B题C题D题
    MySQL 的索引和事务
  • 原文地址:https://blog.csdn.net/qq_57513810/article/details/138077213