学点儿Java_Day11_异常

1 异常概念、异常分类

ArrayIndexOutofBoundsException 数组下标越界异常
NullPointerException 空指针异常
StringIndexOutofBoundsException 字符串下标越界异常
ArithmeticException 算数异常/0
ClassCastException没法强制转换
在这里插入图片描述
大部分以able结尾的一般都是接口,able在英语里面就是表达能不能意思,但是Throwable是类不是接口比较特殊。
public class Throwable
在这里插入图片描述
异常:
就是程序运行时候出现不正常情况。
异常的由来:
Java是纯面向对象语言,异常就是Java用面向对象的思想将不正常的情况进行了封装。
如果访问了数组不存在的下标,java就把这个错误信息封装到ArrayIndexOutOfBoundsException这个类里面。

异常的分类:
Error: 非常严重的错误,联想到人就是得了不治之症。
一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而由运行环境处理。
Exception: 并不是非常严重的错误,联想到人得了感冒这种疾病,通过吃药可以治疗。

编译时异常(非运行时异常,你在写代码时候就需要处理的异常):
程序正确,但因为外在的环境条件不满足引发。例如:这不是程序本身的逻辑错误,Java编译器强制要求必须处理这类异常,如果不去处理这个异常,程序就会报错。(读取一个硬盘上图片,读取的代码逻辑是正确的,但是这个图片所在的硬盘可能出现坏道,就没法读取这个文件,未雨绸缪提前检测可能会有读取硬盘问题)

运行期异常(RuntimeException,代码运行时候抛出的异常 ):
这意味着程序存在bug,如数组越界,0被除,空指针…这类异常需要更改程序来避免,Java编译器强制要求处理这类异。如果抛出运行时异常,是要根据抛出的异常的信息去分析程序的错误,在写代码时候绝大部分情况下不去try-catch运行时异常。

自定义异常:
继承Exception都是编译时异常。
继承自RuntimeException运行时异常。

2 异常的处理

try {
     需要检查的代码(可能会抛出异常,也可能不会抛出异常)
} catch(异常的类型   异常类型的变量) {
    捕获异常后要处理异常
} finally {
    一定会被执行的代码(不管异常抛不抛出都会执行)
}
@Test
    public void test1() {
        //运行时异常:运行的时候抛出的异常,是程序员自己写的代码有问题
        //java.lang.ArithmeticException: / by zero
        //int num1 = 1 / 0;

        //编译时异常:未雨绸缪
        //FileInputStream fileInputStream = new FileInputStream("aa.txt");//这就叫编译时异常
        //Unhandled exception: java.io.FileNotFoundException
        try {
            // 需要检查的代码(可能会抛出异常,也可能不会抛出异常)
            FileInputStream fileInputStream = new FileInputStream("aa.txt");//这就叫编译时异常
            System.out.println("ExceptionDemo.test1");
        } catch (FileNotFoundException e) {
            //捕获异常后要处理异常
            //throw new RuntimeException(e);//抛出了 后边不执行了????????
            e.printStackTrace();
        } finally {
            //一定会被执行的代码(不管异常抛不抛出都会执行)
            System.out.println("finally");
        }

        System.out.println("ExceptionDemo.test1");

    }

3 编译时异常(非运行时异常、检查时异常)

编译时异常在写代码时候必须要处理这个异常,不处理就报错。
处理的方法有两种:
1、try-catch捕获这个异常,自己处理了这个异常
2、throws抛出异常,我不处理这个异常,抛出异常

    @Test
    public void test4() {
        //Unhandled exception: java.lang.ClassNotFoundException
        // try-catch自己处理这个异常
        try {
            Class.forName("com.mysql.jdbc.Driver");//加载驱动,驱动名字
        } catch (ClassNotFoundException e) {
            //throw new RuntimeException(e);
            e.printStackTrace();
            System.out.println("ExceptionDemo.test4");
        }
    }

    @Test
    public void test5() {
        try {
            show();//alt+enter ① 再抛出 ② try catch
        } catch (ClassNotFoundException e) {
            //throw new RuntimeException(e);
            e.printStackTrace();
            System.out.println("ExceptionDemo.test5");
        }
    }

    //抛出编译时异常,谁调用我谁去处理
    @Test
    public void show() throws ClassNotFoundException {//抛出 给别人解决
        Class.forName("com.mysql.jdbc.Driver");
    }

4 多重捕获块(多个catch)

try {
    需要检测的代码(可能会抛出异常,也可能不会抛出异常)
} catch (异常的类型1 异常类型的变量1) {
     捕获异常后处理异常
} catch (异常的类型2 异常类型的变量2) {
     捕获异常后处理异常
} catch (异常的类型3 异常类型的变量3) {
     捕获异常后处理异常
} finally {
     一定会被执行的代码(不管异常抛不抛出都会执行,例如数据库释放连接)
}
    @Test
    public void test6() {
        //FileNotFoundException extends IOException
        //一般都要精确捕获异常,除非实在找不出 用Exception
        try {
            FileInputStream fileInputStream = new FileInputStream("a1.txt");
            fileInputStream.read();
        } catch (FileNotFoundException e) {//不能调换顺序
            //throw new RuntimeException(e);
            e.printStackTrace();//还会继续
            System.out.println("FileNotFoundException");
        } catch (IOException e) {//防止文件损坏 加个异常处理
            //throw new RuntimeException(e);
            e.printStackTrace();//还会继续
            System.out.println("IOException");
        } finally {
            System.out.println("finally");
        }
    }//类似声明成父类 new 子类:IOException是FileNotFoundException的父类

5 自定义异常

1、所有的异常的都是Throwable的子类
2、如果写一个运行时异常,需要继承RuntimeException
3、如果要写一个编译时异常,继承Exception
未雨绸缪,提前检查

案例:模拟银行转账,可以实现存钱和取钱的功能
取钱时候如果余额不够就抛出异常 MeiQianException
MeiQianException:

/*
 * 适度编码益脑,沉迷编码伤身,合理安排时间,享受快乐生活。
 * Copyright @TangXJ
 * Created by TangXJ
 * Created&Used date: 2024/3/26 下午3:31 ~ 2024/3/26 下午3:34
 * Modified date: 2024/3/26 下午3:34
 */

package com.sdust.day11;

public class MeiQianException extends Exception{

    //message 代表抛出异常之后打印的异常信息
    public MeiQianException(String message) {//要打印的信息
        super(message);//new Exception(message)
    }

}

ExceptionDemo:

/*
 * 适度编码益脑,沉迷编码伤身,合理安排时间,享受快乐生活。
 * Copyright @TangXJ
 * Created by TangXJ
 * Created&Used date: 2024/3/26 下午2:24 ~ 2024/3/27 上午12:05
 * Modified date: 2024/3/27 上午12:05
 */

package com.sdust.day11;

import org.junit.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class ExceptionDemo {
    @Test
    public void test7() {
        try {
            quQian(1900);//编译型异常
        } catch (MeiQianException e) {
            e.printStackTrace();
        }
    }
    
    public void quQian(double money) throws MeiQianException {//本身就是为了抛出,不能try catch
        if (money >= 1000) {
            throw new MeiQianException("钱不够");
        }
        System.out.println("钱够了");
    }
}

钱够,没异常:
在这里插入图片描述
钱不够,异常:
在这里插入图片描述

6 throws、throw

throws在签名上
throw在代码块里面
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker安装配置

1. 安装docker-ce sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum -y install docker-ce sudo systemctl enable docker 2. 设置代理 参照:https://docs.docker.com/config/daemon/systemd/#httpht…

计算机网络:物理层 - 编码与调制

计算机网络:物理层 - 编码与调制 基本概念编码不归零制编码归零制编码曼彻斯特编码差分曼彻斯特编码 调制调幅调频调相混合调制 基本概念 在计算机网络中,计算机需要处理和传输用户的文字、图片、音频和视频,他们可以统称为消息数据&#xf…

【JavaScript】面试手撕深拷贝

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 引入深拷贝的作用深浅拷贝的区别浅拷贝深拷贝 深拷贝实现方式JSON.parse(JSON.s…

求两个单链表的差集

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 但行前路,不负韶华&#…

基于SSM作业提交与批改

基于SSM作业提交与批改的设计与实现 摘要 社会的进步导致人们对于学习的追求永不止境,那么追求学习的方式也从单一的书本教程变成了多样化的学习方式。多样化的学习方式不仅仅是需要人们智慧的依靠,还需要能够通过软件的加持进行信息化的价值体现。软件…

VMware下建立CentOS 7

1.点击新建虚拟机 2.下一步 3.选择号安装程序光盘映像文件位置,下一步 4.选择版本和操作系统然后下一步 5.编辑虚拟机名称并选择安装位置,然后下一步 6.设置最大磁盘大小,下一步 7.点击完成 8.点击编辑虚拟机设置 9.将此虚拟机内存设置为2G&a…

DevSecOps平台架构系列-亚马逊云AWS DevSecOps平台架构

目录 一、概述 二、AWS DevSecOps实施原则 2.1 尽早采用安全测试,加速问题反馈 2.2 优先考虑预防性安全控制 2.3 部署检测性安全控制时,确保有与之互补的响应性安全控制 2.4 安全自动化 2.5 总结 三、AWS DevSecOps关键组件 3.1 关键组件 3.2 关…

Div2 D. Effects of Anti Pimples

解题思路 将由小到大排序若不考虑绿色的情况则为最大值的情况为,即选择在它之前的点对于同时选,会被统计贡献时考虑考虑绿色,对于每个,若选则均选对于每个预处理出,记作对由小到大排序为答案的情况为 …

Codigger用户篇:安全、稳定、高效的运行环境(一)

在当今数字化时代,个人数据的安全与隐私保护显得尤为重要。为了满足用户对数据信息的安全需求,我们推出Codigger分布式操作系统,它提供了一个运行私有应用程序的平台,旨在为用户提供一个安全、稳定、高效的私人应用运行环境。Codi…

基于Weibull、Beta、Normal分布的风、光、负荷场景生成及K-means场景削减方法

目录 一、主要内容: 二、代码运行效果: 三、Weibull分布与风机风速: 四、Beta分布与光伏辐照度: 五、Normal分布与电负荷: 六、K-means聚类算法: 七、完整代码数据下载: 一、主要内容&am…

STM32技术打造:智能考勤打卡系统 | 刷卡式上下班签到自动化解决方案

文章目录 一、简易刷卡式打卡考勤系统(一)功能简介原理图设计程序设计 哔哩哔哩: https://www.bilibili.com/video/BV1NZ421Y79W/?spm_id_from333.999.0.0&vd_sourcee5082ef80535e952b2a4301746491be0 一、简易刷卡式打卡考勤系统 &…

系列学习前端之第 6 章:一文掌握 jQuery(熟悉即可)

前言:为什么说 jQuery 熟悉即可,已日渐过时? 作为前端开发中常用的两个库或框架:Vue.js 和 jQuery。不少开发者想要学习 Vue.js 时,都会有一个疑惑:学习 Vue.js 是否一定要学习 jQuery? 从几个…

(五)图像的标准假彩色合成

环境:Windows10专业版 IDEA2021.2.3 jdk11.0.1 GDAL(release-1928-x64-gdal-3-5-2-mapserver-8-0-0) OpenCV-460.jar 系列文章: (一)PythonGDAL实现BSQ,BIP,BIL格式的相互转换 (二&#xff…

【测试开发学习历程】第一个Python程序(下)

6 Python的标识符,命名规则与规范 标识符:python中的标识符是用于识别变量、函数、类、模块以及其他对象的名字叫标识符。 命名规则:所有需要自己命名的地方都必须要遵守以下规则 可以包含数字、字母、_,但是不能以数字开头&…

<c语言学习>数据文件操作

数据文件 按文件功能讲,计算机的文件分为程序文件和数据文件,数据文件操作以下简称文件操作。 程序文件: 包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序&#…

使用npm仓库的优先级以及.npmrc配置文件的使用

使用npm仓库的优先级以及.npmrc配置文件的使用 概念如何设置 registry(包管理仓库)1. 设置项目配置文件2. 设置用户配置文件3. 设置全局配置文件4. .npmrc文件可以配置的常见选项 概念 npm(Node Package Manager)是一个Node.js的…

2014年认证杯SPSSPRO杯数学建模B题(第一阶段)位图的处理算法全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现: 图形(或图像)在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形,位图则使用像素来描述图像。一般来说&#…

既有理论深度又有技术细节——深度学习计算机视觉

推荐序 我曾经试图找到一本既有理论深度、知识广度,又有技术细节、数学原理的关于深度学习的书籍,供自己学习,也推荐给我的学生学习。虽浏览文献无数,但一直没有心仪的目标。两周前,刘升容女士将她的译作《深度学习计…

爬虫实践(1)

这一篇只提登录模拟,主要介绍chrome开发者窗口的使用,实际上相关接口调用都是用到cookie,需要再加一篇从token到cookie,以保证实践的完整性 以migu登录为例,分析其登录过程,之后可以使用任意语言模拟登录&…

蓝桥杯真题Day40 倒计时19天 纯练题!

蓝桥杯第十三届省赛真题-统计子矩阵 题目描述 给定一个 N M 的矩阵 A,请你统计有多少个子矩阵 (最小 1 1,最大 N M) 满足子矩阵中所有数的和不超过给定的整数 K? 输入格式 第一行包含三个整数 N, M 和 K. 之后 N 行每行包含 M 个整数&#xf…