异常的认识 -(java)

news2024/11/18 21:54:08

文章目录

  • 前言
  • 1. 什么时异常?
  • 2. 异常的分类
    • 2.1 运行时异常/非受查异常
    • 2.2 编译时异常/受查异常
  • 3. 处理异常
    • 3.1 抛出异常
    • 3.2 声明异常
    • 3.3 try catch处理异常
  • 总结

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。


前言

本篇通过认识异常了解一般程序中出现的异常,认识异常的分类,正确的处理异常的方式,例如:抛出异常,捕获异常等。如有错误,请在评论区指正,让我们一起交流,共同进步!


本文开始

1. 什么时异常?

异常:程序执行前没有预料到的情况,程序报出的错误;

之前所见的异常:
空指针异常,算术异常等

2. 异常的分类

异常分为一般分为 运行时异常 和 编译时异常
错误:递归死循环等问题为错误
异常大致分类图:

在这里插入图片描述

2.1 运行时异常/非受查异常

运行时异常(RunTimeException):错误不会出现画线部分,程序执行时发生的异常;
例如: 空指针异常,数组越界异常等

public static void main(String[] args) {
        int[] arr = null;
        System.out.println(arr.length); // 空指针异常
        System.out.println(arr[5]); // 数组越界异常
        System.out.println(2/0); // 算数异常
    }

代码异常报错示范:

在这里插入图片描述

2.2 编译时异常/受查异常

编译时异常(Checked Exception):错误部分会出现画线标注,提醒异常,编译时发生的异常;
【注】有编译时异常,必须处理,否则无法编译;
例如:克隆
异常代码示范:

class Student implements Cloneable{
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
public class Main {
    public static void main(String[] args) {
        Student student = new Student();
        Student student1 = (Student)student.clone();
    }
}

编译时异常:

>![在这里插入图片描述](https://img-blog.csdnimg.cn/6efd724499754749a4e913490d74006f.png)

3. 处理异常

异常关键字:throw(抛出时使用),throws(声明异常),try和catch,finally(处理异常时使用)

3.1 抛出异常

抛出异常使用关键字:throw
当满足什么条件下,直接抛出异常;抛出异常指我们知道代码可能发生异常,及时抛出,提醒使用者更改;

在这里插入图片描述

3.2 声明异常

异常可以理解为具有传递性,如果不处理异常,仍会报错;
使用关键字:throws声明
声明异常后,是知道有异常,但是如果不处理,还是不能编译;
声明异常只是知道该部分可能存在异常,如果不处理会传递给后面的代码,都只声明不处理,最后会交给JVM处理,产生异常错误;

在这里插入图片描述

3.3 try catch处理异常

代码格式:

 public static void main(String[] args) {
        try {
            //可能产生异常的代码
            System.out.println(4/0);
        } catch (RuntimeException e) { //括号中存放什么异常
            //处理异常
            e.printStackTrace();  // 打印产生错误的信息 : 红色字体部分如下图
            System.out.println("异常的信息");
        }
        // 写正常的代码
        System.out.println("正常的代码");
    }

【注】异常处理完成后,正常的代码可以执行,不处理,报异常后的代码都不会执行;
1.catch: 可写多个catch,catch的顺序不影响异常的捕获;
2.多个异常情况下,先执行那个程序(代码),先捕获那个异常;(与catch无关)

在这里插入图片描述

finally: try中是否抛出异常,finally中的代码都会执行;
一般用于资源释放;

    try {
            //可能产生异常的代码
        } catch (RuntimeException e) { //括号中存放什么异常
            //处理异常
            e.printStackTrace();
        } finally {
            System.out.println("finall一般用于资源释放");
        }
        System.out.println("正常的代码");

总结

✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

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

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

相关文章

java 之 git 手把手教学

什么是git? Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。 学完之后能干什么? Git 简介 Git 代码托管服务 Git 常用命令 git add前…

C++:STL:常用容器(上):vector

1:vector基本概念 功能:vector 数据结构和数组非常相似,也称为 单端数组. vector 与普通数组区别: 1: 数组是静态空间,而 vector 可以动态扩展 2: 动态扩展:并不是在原空间之后接新…

Java 集合学习笔记:HashMap - 迭代器

Java 集合学习笔记:HashMap - 迭代器iteratorsHashIteratorhasNextnextNoderemoveKeyIteratorValueIteratorEntryIteratorspliteratorsHashMapSpliteratorgetFence 获取拆分器的右边界estimateSize 估计剩余元素的个数KeySpliterator1. trySplit 尝试拆分2. forEach…

AQS学习

1.1 AQS 简单介绍 AQS 的全称为(AbstractQueuedSynchronizer),这个类在 java.util.concurrent.locks 包下面。 AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器, 比如我们提…

多协议标签交换MPLS(计算机网络-网络层)

目录 MPLS 的优势 MPLS 首部的位置与格式 MPLS 首部的位置与格式 MPLS 转发等价类 MPLS 的优势 MPLS 的真正优点在于它的流量管理能力:提供沿多条路径转发分组的能力,并能灵活地为某些流量指定其中的一条路径 这种能力被称为显示路由,其…

占道经营出店摆摊监测识别 python

占道经营出店摆摊监测识别通过python基于yolov7网络架构深度学习模型,对现场画面中检测到出店摆摊违规经营或者流动商贩占道经营时,立即抓拍告警同步后台。OpenCV基于C实现,同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是OpenCV…

【Django】第四课 基于Django超市订单管理系统开发

概念 本文在上一文之上,针对管理员,经理,普通员工身份的用户操作订单管理模块功能。 功能实现 该功能也是业务功能模块,管理员不具备操作权限,普通员工需要对超市所合作的供应商进行进货,因此普通员工可…

数据结构与算法——Java实现排序算法(二)

数据结构与算法——Java实现排序算法(一)_我爱布朗熊的博客-CSDN博客 七、希尔排序(自我感觉有点难理解) 为了解决直接插入排序所带来的弊端,我们接来下看一下希尔排序 希尔排序也是一种插入排序,简单插入排…

口罩佩戴监测系统 yolo

口罩佩戴监测系统通过yolo网络对现场画面人员口罩佩戴情况进行识别检测。我们使用YOLO(你只看一次)算法进行对象检测。YOLO是一个聪明的卷积神经网络(CNN),用于实时进行目标检测。该算法将单个神经网络应用于完整的图像,然后将图像划分为多个区域&#x…

科技交流英语(2022秋)Unit 5 test

科技交流英语(2022秋)Unit 5 test 简介 由电子科技大学组织开设,授课教师为李京南、庞慧、刘兆林等5位老师。 课程介绍 英语广泛用于工程技术领域的国际交流。如何使用简洁的语言清楚地传递信息是工程师在国际舞台上常常面临的问题。本课…

ARM S5PV210 串行通信编程实战

一、串行通信编程实战1 1、整个程序流程分析 (1) 整个串口通信相关程序包含 2 部分:uart_init 负责初始化串口,uart_putc 负责发送一个字节。 2、串口控制器初始化关键步骤 (1) 初始化串口的 Tx 和 Rx 引脚所对应的GPIO(查原理图可知 Rx 和…

【数列分段DP】膜拜

P1564 膜拜 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 思路: 这是个经典模型:数列分段DP,在其他地方也出现过:(150条消息) 代码源每日一题div1 DP 数组划分_lamentropetion的博客-CSDN博客 这类DP模型核…

_13LeetCode代码随想录算法训练营第十三天-C++二叉树

_13LeetCode代码随想录算法训练营第十三天-C二叉树 题目列表 102.二叉树的层序遍历107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针117.填充每个节点的下一个右侧节点指针II…

说话人识别中的数据预处理和数据增强

数据预处理 假设已经采集到一些数据,在进行训练之前,需要先对数据做以下预处理: 数据清洗语音检测(Voice Activity Detection,VAD,也叫Speech Detection,或Silence Suppression,静音…

ICMP V6(计算机网络-网络层)

IPv6 使用的 ICMP IETF 制定的与IPv6配套使用的ICMP新版本,即ICMPv6 ICMPv6报文作为IPv6分组有效载荷进行传输,对应的IPv6“下一个首部字段”的值为58 ICMPv6 的报文格式和 IPv4 使用的 ICMP 的相似,即前 4 个字节的字段名称都是一样的&…

Linux下进程及其相关概念理解

目录 何为进程? task_struct 中存储了什么进程信息? 如何查看进程? 如何获取进程pid? 如何创建子进程? 为什么返回值如此呢? 为什么有两个返回值? 进程状态 进程的一般状态 运行态 终…

18-JavaSE基础巩固练习:正则表达式练习

正则表达式基本练习 一、练习1 1、需求 请编写正则表达式验证用户输入的手机号码是否满足要求。请编写正则表达式验证用户输入的邮箱号是否满足要求。请编写正则表达式验证用户输入的电话号码是否满足要求。 2、思路: 心得: 拿着一个正确的数据&…

SAP UI5 Smart Chart 功能介绍

笔者已经写过一篇详细的文章介绍 SAP UI5 Smart Chart 的使用方法: SAP UI5 应用开发教程之一百五十三 - 使用 SAP UI5 Smart Chart 控件轻松绘制十数种不同类型的专业图表 本文泛泛地介绍 Smart Chart 提供的一些其他功能。 工具栏右侧的按钮可用于选择图表类型…

Zookeeper 1 初识 Zookeeper 1.1 Zookeeper 概念

Zookeeper 【黑马程序员Zookeeper视频教程,快速入门zookeeper技术】 文章目录Zookeeper1 初识 Zookeeper1.1 Zookeeper 概念1.1.1 Zookeeper 概念1 初识 Zookeeper 1.1 Zookeeper 概念 1.1.1 Zookeeper 概念 Zookeeper 是 Apache Hadoop 项目下的一个子项目&…

3、前端笔记-JS-变量

1、什么是变量 变量是用于存放数据的容器,可以通过变量名获取数据 本质:变量是程序在内存中申请的一块用来存放数据的空间 2、变量的使用 2.1 声明变量和赋值 1、声明变量 2、给变量赋值 var:JS关键字,用来声明变量。使用这个关键字后&a…