Exception常见异常类型和处理机制

2023-11-17

Exception:意外异常(异常层次结构的父类)


  • Throwable:是异常Exception与Error的父类,直接继承自Object, Error通常指系统发生的严重性的错误,不能通过程序代码解决的问题
  • Exception异常可以通过修改代码解决,分为检查时异常(必须要做出相应的处理)与运行时异常(可以不做处理)。

一、常见的异常类型:

1、ArrayIndexOutOfBoundsException:数组索引越界异常

通常原因:你访问了不存在的索引

2、NullPointerException:空指针异常

通常原因:数组已经不在指向堆内存了,而你还用数组名去访问元素。

3、RuntimeException:运行时异常

通常原因:表示你的代码本身存在BUG

详细解决方案:https://zhidao.baidu.com/question/329849523.html

4、ArithmeticException:算数异常(算术错误情形,如以零作除数)

通常原因 :当我们定义的除数为整数时(short、int、long)会抛出此异常,被除数为整数时不可为零

5、IllegalArgumentException:非法数据异常

通常原因:字面 非法参数 通常情况为找不到文件;有可能是没有通常是没编译,不排除其他情况

6、ClassNotFoundException:类无法加载异常

通常原因:类不能找到,一般原因都是部署的项目文件中没有这个类包

详细解决方案:https://www.cnblogs.com/xiangkejin/p/8798859.html

7、NumberFormatException:字符串到float类型转换异常

通常原因:数字格式异常

8、IOException:输入输出异常

通常原因:读写异常,一般在读写数据的时候会出现这种问题

9、FileNotFoundException:找不到文件异常

通常原因:路径配置错误 ;编译有问题,文件不存在

10、EOFException:文件结束异常

通常原因:当输入过程中意外到达文件或流的末尾时,抛出此异常

详细解决方案:https://www.cnblogs.com/yiwangzhibujian/p/7107084.html

11、InterruptedException:(线程)中断异常

通常原因:请查看下行链接

详细解决方案:https://www.jianshu.com/p/a8abe097d4ed

12、IndexOutOfBoundsException:下标越界异常

通常原因:通常是指数组下标越界异常
13、NegativeArraySizeException:创建一个大小为负数的数组错误异常

通常原因:如果应用程序试图创建大小为负的数组,则抛出该异常

14、ClassCastException:两个类型间转换不兼容异常

通常原因:(1).一个类是数字类,而由于误操作,错误的将数字类向数字类转换改写成了数字类向字符串类的转换,从而产生了异常。
                 (2).大部分原因是因为强制转换或者是SQL映射时发生了这个异常。


Exception参考资料:https://docs.oracle.com/javase/9/docs/api/java/lang/Exception.html

 


二、异常处理机制:

  • try - catch
  • try - catch - finally
  • 多重catch
  • throw
  • throws

1、try-catch-finally结构中try语包块是必须的catchfinally语句块均可选,但两者至少出现之一

1.1、finally的作用

  •     在try-catch块后加入finally块,finally是否发生异常都执行
  •     当在finally之前使用了System.exit(1)时不执行,因为程序已经退出虚拟机 

 

2、引发多种类型的异常
(1)排列catch语句的顺序:先子类后父类
(2)发生异常时按顺序逐个匹配
(3)只执行第一个与异常类型匹配的catch语句

 

3、存在return的try-catch-finally块:

//存在return的try-catch-finally块

public void method(){
    try{ 
    //代码段1
    //产生异常的代码段2
    } catch (异常类型 ex) { //Exception:异常类型匹配,ex:异常的对象---- 异常父类Exception接收异常子类---多态

    //对异常进行处理的代码段3
      return;
    }finally{
    //代码段4
    }
}

3.1、return的try-catch-finally图解:

注:try-catch-finally中使用return的执行流程 --> 遇到异常时,先执行finally后执行return

 

4、throw与throws:

  • throws:在方法上声明抛出异常
  • throw:手动抛出异常

 

4.2、throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开
(1)调用者处理异常
(2)调用者继续声明异常
                 main()方法声明的异常由Java虚拟机处理

 

5、自定义异常:

借助代码理解自定义异常的定义和使用

(1)通过继承Exception父类创建自定义的异常类,处理异常情况根据实际应用需求。

步骤:定义异常类 -->  编写构造方法,继承父类的实现 -->  实例化自定义异常对象 -->  使用throw抛出

/**
 * 在setAge(int age)中对年龄进行判断, 如果年龄介于1到100直接赋值,否则抛出异常
 * 在测试类中创建对象并调用setAge(int age)方法,使用try-catch捕获并处理异常
 */
public class Years {
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) throws Exception {
        if (age >= 1 && age <= 100) {
            this.age = age;
        } else {
            /*Exception e = new Exception("年龄必须在1-100之间!");
            throw e;*/
            throw new Exception("年龄必须在1-100之间!");
        }
    }

    // 测试类
    public static void main(String[] args) {
        Years ys = new Years();
        Scanner input = new Scanner(System.in);
        System.out.print("请输入你的年龄:");
        ys.age = input.nextInt();

        try {
            ys.setAge(ys.age);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("谢谢使用");
        }
    }
}

 

(2)IO流异常https://blog.csdn.net/weixin_41540362/article/details/102756500

  自定义异常:

  • 继承自Exception(编译时异常)
  • 继承自RuntimeException(运行时异常)

 

 6、异常链与异常处理原则

(1)异常链

(2)异常处理原则

  • 异常处理与性能
  • 异常只能用于非正常情况
  • 需要对捕获的异常做处理
  • 不要将过于庞大的代码块放在try中
  • 在catch中指定具体的异常类型
  • 异常处理,谁调用谁处理

 共勉:明日复明日,明日何其多。我生待明日,万事成蹉跎。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Exception常见异常类型和处理机制 的相关文章

随机推荐

  • window.open完美替代window.showModalDialog

    var url http www baidu com var name 百度 var iWidth 1100 弹窗宽度 var iHeight 700 弹窗高度 var iTop window screen availHeight 30 i
  • 组件化学习-3-源码分析ARouter

    之前我们学习了Arouter的使用 今天分析下源码实现原理 主要分3步 生成路由表 加载路由表 使用路由表 生成路由表 RouteProcessor负责生产路由表 ARouter框架使用编译时注解工具 Annotation Processi
  • 【项目:坦克大战】

    v1 25 新增功能 1 音效的处理 import pygame time random display pygame display COLOR BLACK pygame Color 0 0 0 COLOR RED pygame Colo
  • 华为OD机试 - 处理器问题(Java)

    题目描述 某公司研发了一款高性能AI处理器 每台物理设备具备8颗AI处理器 编号分别为0 1 2 3 4 5 6 7 编号0 3的处理器处于同一个链路中 编号4 7的处理器处于另外一个链路中 不通链路中的处理器不能通信 如下图所示 现给定服
  • msvcp140.dll丢失的详细修复教程

    打开电脑上的浏览器在顶部网址栏目输入 dll修复程序 site 然后按下键盘的回车键打开 电脑 dll中文简称动态链接库 把下载好的修复工具右键压缩文件进行解压操作 解压完成打开修复工具 修复工具中可以看到修复工具右侧中的检测与修复的项目
  • etcd 集群搭建及常用场景分析

    概述 etcd 是一个分布式一致性k v存储系统 可用于服务注册发现与共享配置 具有以下优点 简单 相比于晦涩难懂的paxos算法 etcd基于相对简单且易实现的raft算法实现一致性 并通过gRPC提供接口调用 安全 支持TLS通信 并可
  • 项目import其他class类失败,解决办法:清楚缓存

    如题 今天导入新的项目的时候遇到一些问题 这里记录一下 1 问题 所有的类都是 java文件而不是 class pom文件全部报错 maven 加载不进来 解决 一阵排查发现是加载项目的包目录加载错了 在最外层打开的导致找不到下级的目录 2
  • Too many open files的四种解决办法【转】

    摘要 Too many open files有四种可能 一 单个进程打开文件句柄数过多 二 操作系统打开的文件句柄数过多 三 systemd对该进程进行了限制 四 inotify达到上限 领导见了孔乙己 也每每这样问他 引人发笑 孔乙己自己
  • opencv-光流法

    import numpy as np import cv2 import sys cap cv2 VideoCapture video2 mp4 feature params dict maxCorners 100 qualityLevel
  • matlab实现三自由度机械臂旋转

    matlab实现三自由度的机械臂旋转 1 内容与要求 根据表一机械臂长度 以及图一机械臂配置为机械臂开发一个控制器 使其能够执行特定的任务 更具体地说 让机械臂的末端执行器移动到特定的点 项目要求 你的控制器应该能够控制一个3 自由度的机械
  • 《消息队列高手课》缓存策略:如何使用缓存来减少磁盘IO?

    现代的消息队列 都使用磁盘文件来存储消息 因为磁盘是一个持久化的存储 即使服务器掉电也不会丢失数据 绝大多数用于生产系统的服务器 都会使用多块儿磁盘组成磁盘阵列 这样不仅服务器掉电不会丢失数据 即使其中的一块儿磁盘发生故障 也可以把数据从其
  • 解决 windows 下浏览器无法上网,QQ/微信正常上网

    解决 windows 下浏览器无法上网 QQ 微信正常上网 解决 windows 下浏览器无法解析DNS配置 gt 注意 本处只 提供一种解决思路 并不代表所有问题都能被解决 可以尝试一下 这种问题 一般在浏览器中会 直奔主题 原因 1 查
  • 计算机视觉(十二):Mask R-CNN

    1 引言 Mask R CNN是在Faster R CNN架构为基础上改进的一种目标检测架构 并且能够有效的完成高质量的语义分割 Mask R CNN主要结构如下图所示 那我们就来一步步介绍Mask R CNN的部分 2 特征提取方法 通过
  • aps是什么意思_aps是什么意思

    aps的意思是 1 美国物理学会 全称 American Physical Society 2 人名 短语 APS Assembly空气加压系统 APS Automated Packaging Systems自动封装系统 例句 1 I re
  • win10环境下PCL安装和配置回顾(一)

    2020年博主有写过几篇关于PCL的博客 这边想先回顾下 再增加点新内容 之前写的博客专栏如下链接 https blog csdn net jiugeshao category 11993239 html spm 1001 2014 300
  • 基于FPGA的频率计设计

    文章目录 写在前面 1 什么是频率计 2 测量方法与基本原理 3 待测信号如何输入FPGA 一 实验程序 1 RTL图 2 Verilog 参考设计 3 指派引脚 二 调试验证 输入不同频率的方波 写在前面 1 什么是频率计 频率计是一种专
  • 正则表达式用ajax怎么写,使用AJAX(包含正则表达式)验证用户登录的步骤

    我们来分一下步骤吧 1 HTML代码 页面先写出来 2 正则表达式验证输入的用户名密码是否正确 失去焦点验证 3 Ajax异步提交 4 servlet这是后台处理代码获取数据并对比响应 然后跳转成功页面 效果图 结构 代码如下 table
  • TensorFlow 的基本概念和使用场景

    TensorFlow 是一个热门的机器学习框架 由 Google 开发 用于构建和训练神经网络和其他机器学习模型 下面是 TensorFlow 的基本概念和使用场景 基本概念 1 张量 Tensor 是 TensorFlow 中的基本数据结
  • 防止运营商劫持apk

    title 防止运营商劫持apk tags https upyun apk 运营商 劫持 categories 工作日志 date 2017 05 25 18 18 56 目前f6部分系统使用了upyun的服务 包含apk的下载和静态资源等
  • Exception常见异常类型和处理机制

    Exception 意外异常 异常层次结构的父类 Throwable 是异常Exception与Error的父类 直接继承自Object Error通常指系统发生的严重性的错误 不能通过程序代码解决的问题 Exception异常可以通过修改