【Java知识点整理】 异常及处理

异常

只要控制台红了,报错。。。遇到异常

  • 程序中出险异常就会终止后续的语句
    • 实际情况,我们需要解决异常,不能让程序直接终止

一、异常的概念

过程正常,但是出险意外,这就是异常

异常发生在程序运行期间,它影响了正常的程序执行流程

  • 出险异常后,程序不能直接停止,而是处理掉异常,并继续执行
  • 异常发生的原因有很多,通常包含以下几大类:
    • 检查性异常:如用户输入了非法数据。要打开的文件不存在。网络通信时连接中断。。。。
    • 运行时异常:应该要被程序员避免的异常,有可能在编译时被忽略
    • 错误ERROR:错误不是异常,是脱离程序员控制的问题。如栈溢出,一个错误就发生了,编译时也找不到,JVM虚拟机的错误,内存溢出

1、异常体系结构

在这里插入图片描述

  • Error和Exception都是Throwable的子类
  • Error错误应该尽量避免
  • Exception是未知因素的意外导致的

目前RuntimeException类异常是我们比较常见的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t7qFYwuL-1654507032260)(E:\JavaProject\BaiduSyncdisk\笔记本\截图\Throwable.png)]

2、Exception

  • 非程序性异常,作为程序员要懂得如何处理这些异常,有些异常甚至编译都无法通过
  • Java有自定义了很多异常,一半并不需要自定义额外的异常
  • 和Error的区别:
    • Error一般是灾难性的异常,是程序无法控制和处理的
    • Exception通常是可以被程序的处理的,应该尽可能去处理这些异常

二、异常的应对方法

有5个相关的关键字 try 、catch、finally、throw、throws

2.1 关键字 try 、catch、finally
  • 语法如下

    try
    {
       // 程序代码
    } catch (ExceptionName 异常的变量名1){ 	// 异常名可以填写想要捕获的异常类型
       //Catch 块
    } finally {
        // finnally代码块
    }
    
    • catch的后语句块里是异常出现后执行的
    • 当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。
    • 异常的变量名1有点类似字符串,可以直接输出
    • 里面的ExceptionName可以直接写Exception,可以捕获所有的的异常,也可以写Error,甚至写他们的父类Throwable
      • 因为Exception是异常的总类型,囊括了异常的所有类型——但是最好不要只判断一个
      • 在同时捕获多个异常时,越大的异常要写越后面
    • finally后面的代码块 ——无论程序是否出异常都会执行,用于处理善后工作。(这部分是可选的)
      • finnaly一般用于后续要学习的 关闭IO流,资源的关闭(善后)
  • IDEA生成代码块快捷键:ctrl + alt +T 选择对应的内容

  • 如果要打印异常,可以使用异常的方法printStackTrace()

2.2 多重捕获块
  • 一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。,语法如下

    try{
       // 程序代码
    }catch(异常类型1 异常的变量名1){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }catch(异常类型3 异常的变量名3){
      // 程序代码
    }
    
    • 运行逻辑也从上到下依次检索异常

      如果抛出异常的数据类型与 异常类型1 匹配,它在这里就会被捕获。如果不匹配,它会被传递给第二个 catch 块。

      如此,直到异常被捕获或者通过所有的 catch 块。

2.3 throws/throw 关键字

主动抛出异常,一般用在方法中

  • 在一个方法中,我们可以自定义情况用throw来抛出异常。用法如下

    throw new RemoteException();
    
    • 举例 ,比如除数不能为0 ,我们可以手动判断

          void div(int a,int b) {
              if (b == 0){
                  throw new ArithmeticException();
              }
              System.out.println(a/b);
          }
      
  • 如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。

四、常见的异常整理

  • ArithmeticException(/ by zero)—— 算数异常(除数不能为0 )
  • ArrayIndexOutOfBoundsException
  • NullPointException——空指针异常
  • InputMismatchException——输入异常

五、补充:如何自定义异常?

写开源框架或者大型系统时,才需要用到

目前Java内置的异常可以描述在编程时出现的大部分异常。。。

  • 方法归结一句话:只需要写一个类,继承Exception类。(一旦继承就是自定义的异常类)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xcong_Zhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值