栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

Java09 异常处理 (自学笔记)

Java 更新时间:发布时间: 百科书网 趣学号

学习时间2022年6月6日

异常

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

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

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

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

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t7qFYwuL-1654507032260)(E:JavaProjectBaiduSyncdisk笔记本截图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类。(一旦继承就是自定义的异常类)
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/959755.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号