• Java — 关于异常


    异常概述
    1.异常的介绍
    • 异常就是在程序运行的过程中所发生的不正常的事件,它会中断指令的正常执行。、
    • 常见原因
      • 输入错误、设备错误、代码错误、磁盘空间不足……
      • 最主要的还是代码错误
    2.异常的结构层次

    Java提供异常类来表示程序运行中发生的异常,其中throwable为基类,其下分为ErrorException两类
    在这里插入图片描述

    • Error
      • 运行系统中的内部错误以及资源耗尽错误
      • 唯一的解决办法就是让程序尽早终止
    • Exception
      • 运行时异常(RuntimeException)
        • 在 Java 虚拟机正常运行期间抛出的异常,由程序错误导致。
        • Java编译器允许程序中不对这类异常做出处理。
        • 错误的类型转换、数组下标越界、访问空指针等
    3.异常的后果
    • 会造成:丢失用户数据、程序崩溃……
    • 应当做到向用户通告错误,保存所有的操作结果,允许用户以适当的形式退出程序
    常见的异常
    1.未检查异常

    编译器不要求强制处置的异常,虽然你有可能出现错误,但是不会在编译的时候检查

    • 空引用异常 NullPointerException

      Student stu = null;//stu没有进行初始哈,编译错误
      if(null != stu)
          stu.setName("张三");//可通过判断是否为空跳过
      
      • 1
      • 2
      • 3
    • 算术异常 ArithmeticException

       int a = 10, b = 0;
       int c = a / b;//除数不可为0
      
      • 1
      • 2
    • 数组下标越界异常 ArrayIndexOutOfBoundsException

      int[] nums = {1, 2, 3};
      System.out.println(nums[3]);//访问无效数组下标
      
      • 1
      • 2
    • 字符串下标越界异常 StringIndexOutOfBoundsException

      String str = "abc";
      System.out.println(str.charAt(3));//访问无效字符串位置下标
      
      • 1
      • 2
    • 类型转换异常 ClassCastException

      Object obj = "abc";//向上转型,基类类型的引用不能直接调用
      String str1 = (String)obj;
      System.out.println(str1.charAt(0));
      
      //判断能否进行转型
      if(obj instanceof  Student){
          Student stu1 = (Student)obj;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    2.检查异常

    检查异常也叫受检异常,程序在编译阶段,编译器要求必须去处理的

    • 除了 RuntimeException 与其子类,以及错误Error,其他的都是检查异常
    • 如:IO异常、SQL异常
    处理异常的机制
    1.捕获异常
    • 若当前方法有能力处理异常,就捕获并处理它

    • 应用try—catch—finally语句块

      try{
          Class.forName("net.Student");//主动加载一个类
      }catch (ClassNotFoundException e){//捕获的异常类型(空格)标识符(类似方法的形参)
          //处理异常的代码
          System.out.println("发生了异常");
          e.printStackTrace();//打印异常的堆栈信息
      }finally{//不论是否发生异常,均会执行
          System.out.println("finallly语句块");
          //资源的回收操作
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    • 捕获的异常和真实发生的异常类型匹配执行(异常类型的基类也可

    • 捕获是基类类型,真实发生的是子类类型,也可以匹配执行

    • 子类类型放在上边,基类类型放在下边

    • catchfinally 不能同时省略,无 catchfinally 必须紧跟 try

    2.抛出异常
    • 调用异常的方法来处理这些异常,叫抛出异常

    • 声明异常使用throws关键字,表示该方法可能要抛出异常

      public static int getLength(int[] nums)throws NullPointerException{
          if(null == nums){
              NullPointerException e = new NullPointerException();
              throw e;//抛出异常的动作,当前语句执行时表示真的放生了异常
          }else{
              return nums.length;
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
  • 相关阅读:
    微信小程序之生成二维码
    setup里面 计算属性与监视
    基于STM32的多组外部中断(EXTI)的优化策略与应用
    Zabbix安装与部署
    Spring 02: 基于xml的Spring接管下的三层项目架构
    Flume学习笔记:01-Flume的安装与简单入门示例
    JVM 一些常见问题Q&A
    『力扣刷题本』:链表分割
    剑指 Offer 38. 字符串的排列
    python+requests+pytest+allure自动化框架
  • 原文地址:https://blog.csdn.net/m0_60610120/article/details/127808458