自定义异常,抛出异常

2023-11-12

异常:
      在程序运行过程中,出现的不正常情况叫做异常
  注意:
      1.相同的代码在运行的时候,根据输入的参数或者操作的不同,有可能会发生异常,有可能不会发生异常,
          应该在写代码的过程中尽可能的保证代码的正确性,不要到处都是bug
      2.如果要解决代码中出现的异常,需要添加非常复杂的代码逻辑来进行判断,会使代码变得非常臃肿,不利于维护,
          可读性比较差,因此,推荐大家使用异常机制来处理程序运行过程中出现的问题。
      3.程序在运行过程中如果出现了问题,会导致后面的代码无法正常执行,而使用异常机制之后,可以对异常情况进行处理
          同时后续的代码会继续执行,不会中断整个程序
      4.在异常的处理过程中,不要只是简单的输出错误,要尽可能的将详细的异常信息进行输出
          e.printStackTrace():打印异常信息的最后一行开始追踪,寻找自己编写的Java类
异常的处理方式:
  1.捕获异常
    try{可能出现异常代码逻辑}catch(Exception e){异常处理逻辑}
    try{可能出现异常代码逻辑}catch(具体的异常Exception e){异常处理逻辑}catch(具体的异常);
        可以针对每一种具体的异常做相应的更丰富的处理
  注意:当使用多重的catch的时候一定要注意相关异常的顺序,将子类放在最前面的catch,父类放在后面的catch
      执行过程中可能存在的情况:
        1.正常执行,只执行try中的代码
        2.遇到异常情况,会处理try中异常代码之前的逻辑,后面的逻辑不会执行,最后会执行catch中的代码
        3.使用多重catch的时候,会遇到异常子类不匹配的情况,此时依然会报错,因此建议在catch的最后将所有的异常的父类写上

InputMismatchException 输入参数不匹配异常
ArithmeticException 数学异常
public class TestException {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("请输入被除数:");
        try{
            int num1 = in.nextInt();
            System.out.print("请输入除数:");
            int num2 = in.nextInt();
            System.out.println(String.format("%d / %d = %d",
                    num1,num2,num1 / num2));
        }catch(ArithmeticException e){
            System.out.println("除数不能为0");
            //Throwable类里的getMessage方法
            System.out.println(e.getMessage());
            //跟踪堆栈信息
            e.printStackTrace();
            System.out.println("ArithmeticException");
        }catch(InputMismatchException e){
            e.printStackTrace();
            System.out.println("InputMismatchException");
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("Exception");
        }
        System.out.println("感谢使用本程序!");
        System.out.println("这是红色字体,一般用来标识异常信息");

        try {
            FileInputStream fileInputStream = new FileInputStream(new File("D://e.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            Class.forName("com.tensent.helloWorld");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

       //如何把字符串类型转换成int类型
        String s = "123";
        int i = Integer.parseInt(s);
        System.out.println(i);
    }
}
java中只存在值转递
   自定义异常:在Java的api中提供了非常丰富的异常类,但是在某些情况下不太满足我们的需求,此时需要自定义异常
    步骤:
        1.继承Exception类
        2.自定义实现构造方法
        3.需要使用的时候,使用throw new 自定义异常的名称;
什么时候需要自定义异常?
        一般情况下不需要
        但是在公司要求明确,后者要求异常格式规范统一的时候是必须要自己实现的
 
在程序运行过程中,如果处理异常的部分包含finally的处理,那么无论代码是否发生异常,finally中的代码总会执行
   finally包含哪些处理逻辑
       1.I/O流的关闭操作一般放在finally中
       2.数据库连接的关闭操作一般放在finally中
public class FinallyDemo {
    public static void main(String[] args) {
        try{
            System.out.println(1 / 0);
            System.out.println("try中的语句");
        }catch(Exception e){
            e.printStackTrace();
            System.exit(1);
            return;
        }finally{
            System.out.println("无论是否有异常finally语句块都会被执行!");
            return;
        }
        System.out.println("try...catch...finally...语句块后面的代码逻辑!");
    }
}

throws:声明异常
    在异常情况出现的时候,可以使用try...catch...finally的方式对异常进行处理,除此之外,可以将异常向外抛出,由外部的调用者进行处理
    1.在方法调用过程中,可以存在N多个方法之间的调用,此时假如每个方法中都包含了异常情况
        那么就需要在每个方法中都进行try...catch...另外一种比较简单的方式,就是在方法的最外层调用处理一次即可
        使用throws的方法,对所有执行过程中的所有方法出现的异常进行统一集中处理
    2.如何判断是使用throws还是使用try...catch...
        最稳妥的方法是在每个方法中都进行异常处理
        偷懒的方法是判断在整个调用的过程中,外层的调用方法是否有对异常的处理,如果有直接使用throws,如果没有
            那么就要使用try...catch...
 throws:声明异常,是声明异常是在声明方法的头部去写的,后面可以跟多个异常。
 throw:抛出异常,是在方法内部使用的,后面只能写一个异常
 NullPointerException:空指针异常
 
Error:错误
RuntimeException:运行时异常,是编译的时候出错的,我们是看不出来的
Checked:检查时异常,是编译不通过
main方法:只有JVM虚拟机能调用main方法
异常:Exception的顶级父类是Throwable老祖宗是Object
五个常见的运行时异常:ClassCastException (类转换异常)、IndexOutOfBoundsException (数组越界异常)、NullPointerException (空指针异常)、ArrayStoreException (数据存储异常,操作数组时类型不一致)、BufferOverflowException (还有IO操作的,缓冲溢出异常)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义异常,抛出异常 的相关文章

随机推荐

  • 25章 SPI—读写串行FLASH

    SPI 协议简介 3 条总线分别为SCK 时钟 MOSI 主出从入 MISO 主入从出 片选线为SS1 2 3 从设备 多少设备也就这三条ss MOSI和MISO能看出是全双工 输入输出两条线 可同时使用 NSSx下降沿选中当前设备 上升沿
  • requests方法的post请求方式

    0x01前言 对post请求方式 我们需要明确表单内容的类型 一般情况下 直接提交data参数即可 但如果前端对此有所校验 就需要根据实际情况进行调整 0x02常见的post方式 post form data 这里我自己搭建了个简单的登陆界
  • 文献可视化--vosviewer入门

    VOSviewer是一个用于构建和可视化文献计量网络的软件工具 这些网络可以例如包括期刊 研究人员或个人出版物 并且它们可以基于引用 书目耦合 共同引用或共同作者关系来构建 VOSviewer还提供文本挖掘功能 可用于构建和可视化从科学文献
  • 【论文精读】ACVNet: Attention Concatenation Volume for Accurate and Efficient Stereo Matching

    这是一篇CVPR 2022的文章 基于一种新颖的注意力权重代价体构建方法 设计了一种网络结构 用以立体匹配 视差估计 双目深度估计 原文链接 ACVNet 代码链接 https github com gangweiX ACVNet Abst
  • 华为od机考题目-敏感字段加密

    字符串长度小于等于127字符 只包含大小写字母数字下划线和偶数个双引号 命令字之间以一个或者多个下划线进行分隔 可以通过两个双引号来标识包含下划线d 的命令字或者空命令字 while 1 try k int input nums input
  • opencv (三十八)图像形态学—膨胀

    小白学视觉 笔记 扩展 include
  • 解决 Mac 左滑浏览器默认的返回事件

    阻止 document body style overscrollBehaviorX none 恢复 document body style overscrollBehaviorX auto 参考 https juejin cn post
  • 【MyCat简单介绍】

    1 MyCat简介 MyCat是MySQL分库分表的利器 MyCat的核心功能是分库分表 其配置数据库的主从模式还可实现读写分离 MyCat 是什么 MyCat是目前最流行的基于java语言编写的数据库中间件 是一个实现了MySQL协议的服
  • 图漾相机—windows- Python SDK(官网下载编译)

    文章目录 一 安装依赖 二 下载swig和SDK swig下载连接 https www swig org https www swig org 下载python SDK 下载 Windows Camport3 SDK 三 配置python和
  • 安卓 Android 11、12 不使用第三方 Recovery TWRP 刷入 Magisk v22+ 支持联发科

    测试机型 小米 10 至尊纪念版 Mi 10 Ultra 今天把 MIUI 版本更新到了 12 1 1 发现安卓版本升到了 11 接下来我就正常想刷 wzsx150 大佬的 TWRP 发现刷上去挂载不了 data 不支持安卓 11 网上搜索
  • uni-app 中使用uview生成测试小程序后报错:pleaseSetTranspileDependencies is not defined

    这是一篇踩坑文 记录一个uni app中的坑点 在uni app 中使用uview后在生成小程序后第一次编译时控制台报了这么一个错 在检查了许久的原因后最后找到的解决办法是 在文件 common vendor js 中搜索并删除下面这句话
  • 雷电模拟器中无法登录微信且抖音等视频类应用无法观看视频

    IP受限制解除 https jingyan baidu com article b2c186c83bb443c46ff6ff64 html 转载于 https www cnblogs com ysgcs p 9801374 html
  • docker容器开启mysql的binlog

    在宿主机的conf d里面创建my cnf 添加以下内容 mysqld binlog格式 binlog format mixed 存放地址 注意这个地址是docker容器里面的地址 不是宿主机里面的地址 log bin var lib my
  • vue项目CDN引入

    注 一些对系统并不是至关重要的文件诸如字体文件 css重置 js小插件 背景图片等可能适合使用CDN 因为即使CDN文件不可用 网站也能做到平稳退化 第一步 public index html 里 注 需引入vue并且main js中正常引
  • 联想ThinkStation C30工作站修复记录

    我使用联想ThinkStation C30开发算法 采用windows 64bit系统 前段时间 办公楼断电 导致ThinkStation C30工作站无法正常启动windows系统 一直黑屏 显示如下错误 有时闪烁显示下三角号 Intel
  • Vue中不同组件通信的方式

    props父组件向子组件传递 emit 子组件向父组件传递 root parent 都能够实现访问父组件的属性的方法 两者的区别在于 如果存在多级子组件 通过 parent访问得到的是它最近一级的父组件 通过root访问得到的是根组件 ro
  • Python实验内容(二)

    Python实验内容 实验6 8 实验6 1 有30名同学的成绩存储在列表list1中 67 82 87 80 78 59 46 70 60 66 71 55 42 72 63 65 68 80 67 73 60 89 74 82 74 6
  • 相机曝光与增益

    曝光 和 增益 是直接控制传感器 CCD CMOS 上读出来的数据 是要优先调节的 以调节曝光时间为主 不过曝的前提下 增加曝光时间可以增加信噪比 使图像清晰 软件上有个选项可以把过曝的区域显示出来 当然 对于很弱的信号 曝光也不能无限增加
  • word如何只设置一张为横向,怎样把word文档里单独的一页变成横向

    以word2007为例 将文档里的某一页2113设置成横向页 1 打开5261word文档 选中某一页种4102的所有文字 单击1653 页面布局 菜单 单击 页面设置 工具栏组右下角的扩展按钮 在弹出的 页面设置 对话框中的 页边距 选项
  • 自定义异常,抛出异常

    异常 在程序运行过程中 出现的不正常情况叫做异常 注意 1 相同的代码在运行的时候 根据输入的参数或者操作的不同 有可能会发生异常 有可能不会发生异常 应该在写代码的过程中尽可能的保证代码的正确性 不要到处都是bug 2 如果要解决代码中出