day17_异常

news2024/11/18 22:44:59

今日内容

零、 复习昨日
一、作业
二、异常
三、自定义异常

零、 复习昨日

见晨考,重点是String类的方法

StringBuffer和StringBuiler面试问

日期解析和格式化

int i = Integer.parseInt(“111”);

一、作业

,见答案

二、异常

2.1 介绍

异常,就是程序出现的不正常的情况.

2.2 分类

在java程序设计中,关于异常有一大类,叫做Throwable
其下又有两个分类: Error,Exception

Error: 程序出现的严重问题,且只能抛出(throw),不能试图捕获(try catch)

Exception: 是程序出现的问题,可以捕获可以抛出

image-20230221110049534

2.3 编译期异常&运行期异常

  • 运行期异常是RuntimeException及其子类

    • 运行期异常就是指运行时会出现的异常
    • 运行期异常可以不用主动处理
  • 编译期异常是除了RuntimeException及其子类以外的所有异常

    • 在编译期即运行前就已经提示有异常了
    • 编译期必须处理(捕获or抛出)
        public static void main(String[] args) throws ParseException {
    
            System.out.println(1/1 );
            // 这句话会出现运行时异常,ArithmeticException
            System.out.println(1/0 );
    
            int[] arr = {1};
            // 这句话会出现运行时异常,ArrayIndexOutOfBoundsException
            System.out.println(arr[2] );
    
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            // parse()会出现编译期异常ParseException,需要处理
            Date date = sdf.parse("2000-01-01");
    
        }
    

2.4 异常的产生

异常是在方法时,代码内部使用throw 来主动抛出一个异常对象

    public static void main(String[] args) throws ParseException{
        m1();// 此处也有异常,因为m1有抛出
    }

    // 产生异常
    public static void m1()  {
        System.out.println(1/1 );
        throw new RuntimeException("没啥事,就是玩");
        // throw new ParseException("没啥事,就是玩2",1);
    }

一旦有异常产生,异常后的代码不再执行!!!

2.5 异常的处理

异常的处理的只有两种方案:

  1. 抛出(throws)
  2. 试图捕获(try catch)

2.5.1 抛出异常

异常的处理之抛出异常

什么叫抛出? 将错误信息给抛出到控制台给开发者看,将来也可以将异常信息给输出到本地磁盘,日志文件,邮件,数据库等等

抛出什么? 异常信息:异常类名,异常原因,异常位置

如何真正的抛出异常? 通过throw

抛出后如何处理? 一直向上抛,直到main,抛给jvm

具体怎么写? 在方法签名中,具体是在参数列表后,{}前使用throws关键词声明要抛出的异常类,如果有多个异常,可以使用逗号隔开


特别注意: 一旦有异常抛出,抛出异常后的代码不再执行!!!

image-20230418114342890

throw 和 throws区别

throwthrows
位置方法内方法签名上
跟的内容1个异常对象多个异常类名
功能创建异常的声明方法有异常

2.5.2 试图捕获

试图捕获异常,关键词 try…catch

与抛出异常最主要的区别: 捕获异常后,后续代码还能执行

语法:

try{
    // 正常的代码,或者说是感觉有可能出异常的代码
}catch(异常类名 对象名)  {// 要抓的异常类名
    // 抓住后,可以做一些事情
}

执行流程:

  • 执行try内代码
  • 如果try内代码没有异常,跳过catch,去执行后续代码
  • 如果try内代码有异常,与catch后要抓的异常匹配,如果一致则可以抓住,执行catch内代码,如果不一致,则抓不住,继续抛出
  • 但是无论try-catch内是否有异常,try-catch后都能执行
    public static void m1(){
        try{
            System.out.println(1/0 );
        }catch (NullPointerException ae){
            System.out.println("抓住啦空指针" );
        }catch (ArithmeticException ae) {
            System.out.println("抓住-算术" );
        }catch (ArrayIndexOutOfBoundsException ae){
            System.out.println("抓住-下标越界" );
        }
    }
        try{
            System.out.println(1/1 );
            int[] arr = {1};
            System.out.println(arr[10] );
        }catch (Exception ae){// 可以写一个最大异常,只有可以捕获全部异常
            System.out.println("抓住啦-老大" );
        }

2.5.3 finally

finally不是用来处理异常的,只不过经常配合try,和catch语法一起使用,

语法: 放在try-catch后

执行流程: 无论有误有无报错,finally最终一定会执行

作用是: 释放资源

    public static void m() {
        // try {
        //     System.out.println(1/0);
        // } catch (Exception e) {
        //     System.out.println("抓住异常");
        // } finally {
        //     System.out.println("最终的-资源释放" );
        // }
        try {
            System.out.println(1/0 );
        }finally {
            System.out.println("最终的" );
        }
    }

2.6 异常的应用

  • 如果是自己测试练习,那么异常就直接抛出
  • 如果在开发时建议捕获异常,一方面是程序可以继续执行,一方面是捕获后可以再对异常进行处理
  • 自己在设计方法时,方法异常尽量自己捕获
  • 语法必须要求的: 重写时,子类方法异常范围要小于等于父类异常范围
    @Override
    public void m() throws Exception{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 父类方法没有异常,子类只能捕获
        // try {
        //     sdf.parse("2020-01-01");
        // } catch (ParseException e) {
        //     e.printStackTrace( );
        // }

    }

2.7 异常的API

学异常的API是为了捕获到异常后,对异常的操作

发现所有异常的构造方法,和方法其实都是使用的Throwable类中的方法

  • String getMessage() 获得异常的信息
  • void printStackTrace() 将堆栈中异常信息打印到控制台
public static void main(String[] args) {

        try{
            // System.out.println(1/0 );
            int[] arr = {100};
            System.out.println(arr[1] );
        }catch (Exception e) {
            // 错误信息
            String message = e.getMessage( );
            // System.out.println(message );

            // 是将异常再重新打印出来
            e.printStackTrace();
        }
}

三、自定义异常

自定义异常,javase阶段用不上,一般是项目中设计使用


  1. 自定义类
  2. 继承异常体系中的类
    1. 继承Error,就不能捕获,只能抛出
    2. 继承Exception,必须处理
    3. 继承RuntimeException,默认可以不处理
  3. 设计无参,有参构造
  4. 使用super将异常信息向上传递给父类
  5. 在代码中使用throw 将异常对象抛出
public class AgeOutOfBoundsException extends RuntimeException{

    public AgeOutOfBoundsException(){

    }
    public AgeOutOfBoundsException(String message){
        super(message);
    }
}
public class Student {

    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age >= 0 && age <= 120) {
            this.age = age;
        } else {
            throw new AgeOutOfBoundsException("年龄"+age+"越界");
        }
    }
}

四、总结

对于现在而言,对于异常就是 顺其自然
但是要记住
- 异常的分类
- 编译期和运行时有什么区别
- 捕获和抛出语法
- 捕获后和抛出后什么影响
- 自定义异常,暂时用不上,在后期开发项目会用上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RPA流程自动化技术在金融机构的落地方案详解

金融机构在面向数字化运营的转型过程中&#xff0c;需将智能流程自动化技术整合到数字化转型战略中&#xff0c;规划建设统一的企业流程自动化处理平台&#xff0c;作为数字化运营的辅助支撑类系统&#xff0c;明确流程治理方法和运营模式&#xff0c;确保足够的规模弹性&#…

【深度学习】Softmax回归及前馈神经网络

1 实验内容简介 1.1 实验目的 &#xff08;1&#xff09;熟练掌握tensor相关各种操作&#xff1b; &#xff08;2&#xff09;掌握广义线性回归模型&#xff08;logistic模型、sofmax模型&#xff09;、前馈神经网络模型的原理&#xff1b; &#xff08;3&#xff09;熟练掌…

第一章: uniapp引入axios异步框架

第一章&#xff1a; uniapp引入axios异步框架 在学习uniapp的过程中&#xff0c;发现uniapp框架默认集成request请求框架存在问题&#xff0c;发送请求时在header中塞入token值&#xff0c;而后台接收不到&#xff0c;也就是说uniapp默认的request请求框架&#xff0c;不支持在…

巨烽数字化采购项目启动,甄云助力医疗影像显示领军企业数智化升级

近日&#xff0c;医疗影像显示行业的领军者深圳市巨烽显示科技有限公司&#xff08;以下简称“巨烽”&#xff09;联合甄云科技举办数字化采购管理项目启动会&#xff0c;双方相关部门负责人及项目组成员参加了此次会议。 会上&#xff0c;就巨烽的数字化采购管理系统建设升级…

AI写作机器人-ai文章生成器在线

使用AI续写生成器&#xff0c;让内容创作事半功倍&#xff01; 随着人工智能技术的不断进步和应用&#xff0c;AI续写生成器的出现为内容创作带来了全新的革命。这种技术可以让你的写作事半功倍&#xff0c;让你轻松生成高质量的文章和内容。在这篇文章中&#xff0c;我们将介绍…

如何伪原创-自媒体伪原创软件

批量文字伪原创的作用 批量文字伪原创是指通过对原文进行修改、改写、调整等方式&#xff0c;生成大量新的类似原文的文本。其作用主要包括以下几个方面&#xff1a; 提高文本的独创性&#xff1a;批量伪原创可以有效地避免大量相似内容的出现&#xff0c;从而提高文本的独创性…

我如何学习使用 Jetpack Compose 开发 Android 应用程序

我如何学习使用 Jetpack Compose 开发 Android 应用程序 Jetpack Compose 和 Android 开发简介 2021 年 7 月&#xff0c;Google 发布了用于为 Android 应用构建原生 UI 的全新工具包 1.0 版。Jetpack Compose 是 Android 开发人员的游戏规则改变者&#xff0c;因为它从通过 X…

C#如何解决项目打开问题 error : 找不到指定的 SDK“Microsoft.NET.Sdk.WindowsDesktop”

错误提示&#xff0c;问题描述 后来发现&#xff0c;直接安装rider还是不能解决解决&#xff08;会自动配置关联&#xff08;path等&#xff09;&#xff0c;甚至自动下载的&#xff0c;官方的visual studio反而不会&#xff0c;之后再详细看怎么弄了&#xff09; VS2022项目…

IDEA 用上这款免费 GPT4 插件,生产力爆表了

大家好&#xff0c;我是一航&#xff01; 早前给大家分享过GPT的一些玩法&#xff0c;但是依旧有很多铁子没有掌握魔法的奥秘&#xff0c;始终没有用上&#xff1b;前两天&#xff0c;一兄台分享给我一款 IDE 插件&#xff1a;Bito-ChatGPT &#xff0c;安装就能直接在IDE中使…

如何选择合适的网络自动化工具

通过网络自动化工具实现网络自动化是所有网络组织的关键。如果没有合适的网络自动化工具&#xff0c;拥有由许多设备组成的大型网络环境的组织将无法执行重要操作&#xff0c;例如按时备份配置、实时跟踪不需要的更改以及遵守行业法规。当组织未能使用正确的网络自动化工具来执…

yolov8训练自己的数据集遇到的问题

训练分类模型 1.如何更改模型的类别数nc 根据本地模型配置文件.yaml可以设置nc 但是&#xff0c;这里无法用到预训练模型.pt模型文件&#xff0c;预训练模型的权重参数是在大数据集上训练得到的&#xff0c;泛化性能可能比较好&#xff0c;所以&#xff0c;下载了官方的分类…

Flink+Kafka、Pulsar实现端到端的exactly-once语义

End-to-End Exactly-Once Processing in Apache Flink with Apache Kafka 2017年12月Apache Flink社区发布了1.4版本。该版本正式引入了一个里程碑式的功能&#xff1a;两阶段提交Sink&#xff0c;即TwoPhaseCommitSinkFunction。该SinkFunction提取并封装了两阶段提交协议中的…

【离散数学】测试五 图论

1. n层正则m叉树一共有()片树叶。 A. nm B. mn C. mn 正确答案: B 2. 下图是一棵最优二叉树 A. 对 B. 错 正确答案: B 3. 要构造权为1,4,9,16,25,36,49,64,81,100一棵最优二叉树,则必须先构造权为5,9,16,25,36,49,64,81,100一棵最优二叉树. A. 对 B. 错 …

视频剪辑必备,这6个网站承包你一年的音效素材

视频剪辑中需要用到各种声音、音效素材&#xff0c;这些音效不仅能让你的视频更丰富&#xff0c;还能更好的表达视频内容&#xff0c;传递情绪让观者感到共鸣。很多朋友剪辑过程中为了找到好的配乐、音效&#xff0c;往往会花费大量的时间&#xff0c;找到了还有可能受版权限制…

装机必备(二补充)--Win10系统盘,装Win10系统(无法引导启动问题-找不到任务设备驱动程序。请确保安装介质包含正确的驱动程序)

对于联想的thinkpad&#xff0c;开机时候按F1来更改bios设置&#xff0c;F12是选择U盘引导启动 thinkpad如何进入bios界面_thinkpad怎么进入u盘启动&#xff0d;系统城 1 F1界面1.按→方向键移动到Security&#xff0c;将secure boot改成disabled&#xff0c;关闭安全启动&…

【数据结构】简单快速过一遍红黑树

文章目录 红黑树1 红黑树的概念2 红黑树的性质3 红黑树节点的定义4 红黑树的插入操作5 红黑树的验证6 红黑树与AVL树的比较7.C实现红黑树 红黑树 1 红黑树的概念 ​ 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;…

记一次oracle入库慢,log file switch (checkpoint incomplete)

AWR报告生成&#xff1a;Oracle AWR报告生成步骤_小百菜的博客-CSDN博客 发现log file switch (checkpoint incomplete) 这里出现了大量的log file switch(checkpoint incomplete)等待事件。 查看redo每个组的大小、状态 select group#,thread#,archived,status, bytes/102…

Python数据结构-----非递归实现快速排序

目录 前言&#xff1a; 非递归快排 1.概念原理 2.示例 Python代码实现 非递归快速排序 前言&#xff1a; 上一期我们学习了通过递归来实现快速排序的方法&#xff0c;那这一期我们就来一起学习怎么去通过非递归的方法来去实现快速排序的功能。&#xff08;上一期连接Pytho…

新来一00后,给我卷崩溃了..

2022年已经结束结束了&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;相信很多小伙伴也在准备今年的金三银四的面试计划。 在此展示一套学习笔记 / 面试手册&#xff0c;年后跳槽的朋友可以好好刷一刷&#xff0c;还是挺有必要的&#xff0c;它几乎涵盖了所有的…

SLIC超像素分割算法

SLIC超像素分割算法 《SLIC Superpixels》 摘要 超像素在计算机视觉应用中越来越受欢迎。然而&#xff0c;很少有算法能够输出所需数量的规则、紧凑的超级像素&#xff0c;并且计算开销低。我们介绍了一种新的算法&#xff0c;将像素聚类在组合的五维颜色和图像平面空间中&a…