• Java异常的处理(超详细)


    java异常

    前言:

    在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的。

    本章将会学习到

    编译异常

    运行异常

    异常的处理try-catch

    异常基本介绍

    基本概念

    java语言中,将程序执行中发生的不正常情况称为"异常".(开发过程中的语法错误或者逻辑错误不算异常)

    执行过程中所发生的的异常可以分为两大类

    1.Error(错误):java虚拟机无法解决的严重问题.如:jvm系统错误,资源耗尽等严重问题,比如栈的溢出属于严重错误,程序会崩溃

    2.Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用指定的代码去快速定位

    常见的运行异常

    1.NullPointerException空指针异常

    2.ArithmeticException数学运算异常

    3.ArrayIndexOutOfBoundsException数组下标越界异常

    4.ClassCastException类型转换异常

    5.NumberFormatException数字格式不正确

    编程异常

    编程异常是在编译期间,就必须处理的异常,否则代码不能通过编译

    常见的编译异常

    SQLException 操作数据库时,查询表可能发生异常

    IOExcepiton 操作文件时,发生的异常

    FileNotFoundException当操作一个不存在的文件时,发生异常

    ClassNotFoundException 加载类,而该类不存在时,异常

    EOFException 操作文件,到文件末尾,发生异常

    IIIegalArguementException 参数异常

    异常处理

    异常处理就是对异常处理的方式.

    异常处理的方式

    1.try-catch-finally

    2.throws + 异常类型

    Java提供的是异常处理的抓抛模型。
    过程一:Java程序的执行过程中如出现异常, 会生成一个异常类对象,该异常对象将被提交给Java运行时系统, 这个过程称为抛出(throw)异常。
    过程二:抓,可以理解为异常的护理方式。

    异常对象的生成
    由虚拟机自动生成:程序运行过程中,虚拟机检测到程序发生了问题,如果在当前代码中没有找到相应的处理程序,就会在后台自动创建一个对应异常类的实例对象并抛出——自动抛出
    由开发人员手动创建: Exception exception = new ClassCastException();——创建好的异常对象不抛出对程序没有任何影响,和创建一个普通对象一样。

    异常是如何抛出的?

    main->function01->function02(异常函数位置)

    遇到异常后 function02->function01->main

    为了保持整个程序的正常处理,所以必须对代码进行异常处理

    try catch 语法

    try{
    可能会异常的代码
    }
    cath(ExceptionNum1 e){
    当产生ExceptionNum1异常会在这里进行处理  比如打印异常/比如输出对应的信息,"你错了还不快改!!"
    }
    catch(ExceptionNUm2 e){
    当产生ExceptionNum2异常会在这里进行处理  比如打印异常/比如输出对应的信息,"你错了还不快改!!"
    }finally{
    无论上面是否会产生异常都会执行的代码
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    像数据库连接,输入输出流,网络编程socket等资源,JVM是不能自动回收的,我们需要手动的进行资源的释放。此时的资源的释放,就需要声明在finally中。

    如果知道指定的错误类型(数学运算错误…) 可以使用指定的错误类型,也可以使用所有异常的父类

    Excption 去作为参数

    throws +异常类型

    声明抛出异常是Java中处理异常的第二种方式
    throws +异常类型,写在方法的声明处,此时此方法执行时, 可能会抛出的类型。
    如果一个方法(中的语句执行时)可能生成某种异常, 但是并不能确定如何处理这种异常, 则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
    在方法声明中用throws语句可以声明抛出异常的列表, throws后面的异常类型可以是方法中产生的异常类型, 也可以是它的父类。
    一旦方法体执行时,出现异常,仍会在异常代码处,生成一个异常类的对象,此对象满足throws后异常类型是,就会被抛出。异常代码后续的代码,就不在执行。
    throws的方式只是将异常抛给了方法的调用者,并没有真正将异常处理掉。

    比如说当我们去读文件可能会产生文件 FileNotFoundException类型的异常

        public void method() {
              try {
                  test3();
              } catch (FileNotFoundException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              }
         }
         
         @Test
         public void test3() throws  FileNotFoundException,IOException {
              File file =new File("heool.txt");
              FileInputStream fis = new FileInputStream(file);
              
              int data = fis.read();
              while(data != -1) {
                  System.out.println((char)data);
                  data = fis.read();
              }
              fis.close();
         }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    那么何选择try-catch和throws

    如果父类中被重写的方法中没有throws方式处理异常,则子类重写的方法中也不能使用throws,意味如果子类重写的方法中有异常,必须使用try-catch。
    执行的方法a中,先后又调用了另外的几个方法,这九个方法是递进关系执行的,我们建议这几个方法使用throws的方式进行处理。而执行的方法a可以考虑使用try-catch

    手动抛出异常
    java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出, 也可根据需要使用人工创建并抛出。
    首先要生成异常类对象, 然后通过throw语句实现抛出操作(提交给Java运行环境)。
    IOException e = new IOException();
    throw e;

  • 相关阅读:
    99%的时间里使用的14个git命令
    利用Python批量替换文档中特定参数的数值
    elasticsearch 6.3.2 集群配置
    第三章 运算符、表达式、语句
    CImageList 图像列表
    Java getResource
    Linux动静态库
    前端不安装Nginx情况下部署
    经典算法-----迷宫问题(栈的应用)
    微服务探索之路05篇jenkins构建net6和vue docker镜像到Harbor自动更新k8s服务镜像
  • 原文地址:https://blog.csdn.net/weixin_45185267/article/details/125531876