认识异常(1)

 ❤️❤️前言~🥳🎉🎉🎉

hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍 

💥个人主页:E绵绵的博客
💥所属专栏:JAVASE题目练习  JAVASE知识点专栏  c语言知识点专栏   c语言题目练习

❤️❤️今天我们就给大家带来异常的介绍,对于异常的知识点很多很复杂,但只要肯用心,一定能摸透的。那么一起加油,出发吧!

 

异常的概念与体系结构

异常的概念 

​​​​ 在Java中,将程序执行过程中发生的不正常行为称为异常。

🎯🎯注意开发过程中遇到的语法错误和逻辑错误不被称为异常():

例如将 System.out.println 拼写错了, 写成了 system.out.println.这是语法错误不是异常。

或者你的冒泡排序中代码错了导致结果不对这也不叫异常。是逻辑错误不是异常。

而下方才是真正的异常 :

从上述过程中可以看到,java中不同类型的异常,都有与其对应的类来进行描述。所以我们常说异常其实是一个类

🎯🎯异常的体系结构  

🎯🎯因为异常其实是类,且从上图我们可以得出:

1. Throwable:是异常体系的顶层父类,其派生出两个重要的子类 Error 和 Exception,它们两个是异常的两大类别:

2. Error:指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表: StackOverflowError(栈溢出)和OutOfMemoryError(内存不足),Errow是严重错误,一旦发生程序就会崩溃,怎么救也救不回来。

3. Exception: 是指在程序运行过程中出现的非正常情况,但它不会导致程序立即终止。Exception异常可以被程序员通过代码捕获并进行处理,以保证程序的正常执行。该类异常通常是由于输入错误、网络故障、文件读写错误等引起的。例如,除以零、数组越界等都属于异常。当异常发生时,程序会抛出一个异常对象,并根据异常处理机制进行相应的处理。

虽然Throwable才是真正的异常顶层父类,但我们平时所说的异常通常是Exception,errow虽然本质是异常,但我们通常叫做错误。  

❤️❤️除此之外,我们还从上得知exception异常分为运行时异常(非受检异常)和编译时异常(受检异常) 

运行时异常 

🎯🎯运行时异常:运行时异常是在程序运行过程中才会发生的异常.

常见的运行时异常包括以下五种:

NullPointerException(空指针异常):当程序试图访问一个空对象的成员变量或调用空对象的方法时,会抛出空指针异常。

ArrayIndexOutOfBoundsException(数组越界异常):当程序试图访问数组中不存在的索引位置时,会抛出数组越界异常。

ClassCastException(类转换异常):当程序试图将一个对象强制转换为不兼容的类型时,会抛出类转换异常。

IllegalArgumentException(非法参数异常):当方法接收到一个不合法或不适当的参数时,会抛出非法参数异常。

ArithmeticException(算术异常):当程序执行算术运算时出现错误,例如除以零或取模运算的除数为零,会抛出算术异常。

​​​​​​​这些异常都是在程序运行时可能发生的,可以通过合理的代码设计和异常处理机制来避免或处理这些异常。

运行时异常可以选择处理,也可以不处理:

如果不处理,程序会运行到异常位置时终止并抛出异常信息。处理则可以不报错误一直运行到程序结束。

 编译时异常

🎯🎯编译时异常是在编译阶段检测到的异常,在代码中必须对它进行处理。如果不处理编译时异常,编译器会报错并阻止程序的编译,运行都运行不了。

一般是发生网络,数据库和文件操作的时候出现编译异常:

以上我们都还没学。

当然也存在我们学过的编译时异常,就是clone(),必须处理它才能运行程序

处理编译时异常的方式可以使用try-catch语句块捕获异常并进行相应的处理,或者使用throws关键字将异常抛出给上层调用者处理。我们之后会讲述这些关键字。

防御式编程

❤️❤️错误在代码中是客观存在的. 因此我们要让程序出现问题的时候及时通知程序猿.

其主要的方式如下: 

❤️❤️ LBYL: Look Before You Leap. 在操作之前就做充分的检查. 即:事前防御型

boolean ret = false;
ret = 登陆游戏();
if (!ret) {处理登陆游戏错误;return;
}
ret = 开始匹配();
if (!ret) {处理匹配错误;return;
}
ret = 游戏确认();
if (!ret) {处理游戏确认错误;return;
}
ret = 选择英雄();
if (!ret) {处理选择英雄错误;return;}
ret = 载入游戏画面();
if (!ret) {处理载入游戏错误;return;
}
.....

缺陷:正常流程和错误处理流程代码混在一起, 代码整体显的比较混乱。所以我们一般很少用该方法。

❤️❤️EAFP: It's Easier to Ask Forgiveness than Permission. "事后获取原谅比事前获取许可更容易". 也就是先操作, 遇到问题再处理. 即:事后认错型 

try {登陆游戏();开始匹配();游戏确认();选择英雄();载入游戏画面();...
} catch (登陆游戏异常) {处理登陆游戏异常;
} catch (开始匹配异常) {处理开始匹配异常;
} catch (游戏确认异常) {处理游戏确认异常;
} catch (选择英雄异常) {处理选择英雄异常;
} catch (载入游戏画面异常) {处理载入游戏画面异常;
}
......

优势:正常流程和错误流程是分离开的, 程序员更关注正常流程,代码更清晰,容易理解代码

所以我们在进行处理时基本都是用EAFP,很少用LBYL。

在Java中,异常处理主要用到这5个关键字:throw、try、catch、final、throws。而这五个关键字要讲解的话要讲很久,所以我们就放到下篇文章里。

 总结

这篇文章已经有很多知识点了,够铁汁们消化了,到这里就先结束吧,下篇文章我们就带来异常处理的五个关键字的讲解以及一些其他知识点。还希望各位大佬们能给个三连,点点关注,点点赞,发发评论呀,感谢各位大佬~❤️❤️💕💕🥳🎉🎉🎉

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony南向开发实例:【游戏手柄】

介绍 基于TS扩展的声明式开发范式编程语言,以及OpenHarmony的分布式能力实现的一个手柄游戏。 完成本篇Codelab需要两台开发板,一台开发板作为游戏端,一台开发板作为手柄端,实现如下功能: 游戏端呈现飞机移动、发射…

python生成二维码

要在Python中生成二维码,可以使用第三方库qrcode。首先,确保已经安装了qrcode库: pip install qrcode然后,使用以下代码生成二维码: import qrcodedata "https://mp.csdn.net/mp_blog/creation/editor?spm100…

项目7-音乐播放器2(上传音乐+查询音乐+拦截器)

0.加入拦截器 之后就不用对用户是否登录进行判断了 0.1 定义拦截器 0.2 注册拦截器 生效 1.上传音乐的接口设计 请求: { post, /music/upload {singer,MultipartFile file}, } 响应: { "status": 0, "message&…

Promise简单概述

一. Promise是什么? 理解 1.抽象表达: Promise是一门新的技术(ES6规范) Promise是JS中进行异步编程的新解决方案(旧方案是单纯使用回调函数) 异步编程:包括fs文件操作,数据库操作(Mysql),AJAX,定时器 2.具…

RK3568笔记二十二:基于TACO的垃圾检测和识别

若该文为原创文章,转载请注明原文出处。 基于TACO数据集,使用YOLOv8分割模型进行垃圾检测和识别,并在ATK-RK3568上部署运行。 一、环境 1、测试训练环境:AutoDL. 2、平台:rk3568 3、开发板: ATK-RK3568正点原子板子…

大创项目推荐 深度学习YOLOv5车辆颜色识别检测 - python opencv

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖,适合作为竞赛课题方向&#xff0…

前端开发框架BootStrap

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl BootStrap概述 Bootstrap是一个开源的前端框架,它由Twitter的设计师和开发者创建并维护。Bootstrap提供了许多现成的Web组件,可帮助开发者快速设计和…

36、二叉树-二叉树的中序遍历

思路: 二叉树的遍历可以有 前序,中序,后序,层序遍历。 前序:头左右中序:左头右后序:左右头层序:从左往右依次遍历 实现方式: 递归通过栈结构便于回溯 代码如下: c…

软件开发安全设计方案

2.1.应用系统架构安全设计要求 2.2.应用系统软件功能安全设计要求 2.3.应用系统存储安全设计要求 2.4.应用系统通讯安全设计要求 2.5.应用系统数据库安全设计要求 2.6.应用系统数据安全设计要求 软件开发全资料获取:软件开发全套资料_软件开发资料-CSDN博客https://…

【C++学习】C++IO流

这里写目录标题 🚀C语言的输入与输出🚀什么是流🚀CIO流🚀C标准IO流🚀C文件IO流 🚀C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取…

Go Plugin:动态模块的加载与问题解析_go语言加载动态库的工具(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞…

flutter书架形式格口的动态创建(行、列数,是否全选的配置)

根据传入的行列数创建不同格口数量的书架 左图:5行3列、右图:3行3列 代码 import package:jade/bean/experienceStation/ExpCellSpecsBean.dart; import package:jade/configs/PathConfig.dart; import package:jade/utils/DialogUtils.dart; import p…

springboot整合dubbo实现RPC服务远程调用

一、dubbo简介 1.什么是dubbo Apache Dubbo是一款微服务开发框架,他提供了RPC通信与微服务治理两大关键能力。有着远程发现与通信的能力,可以实现服务注册、负载均衡、流量调度等服务治理诉求。 2.dubbo基本工作原理 Contaniner:容器Provider&#xf…

Linux内核之WRITE_ONCE用法实例(四十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

分析ARP解析过程

1、实验环境 主机A和主机B连接到交换机,并与一台路由器互连,如图7.17所示,路由器充当网关。 图7.17 实验案例一示意图 2、需求描述 查看 ARP 相关信息,熟悉在PC 和 Cisco 设备上的常用命令,设置主机A和主机B为同一个网段网关设置为路由接…

【Conda基础命令】使用conda创建、查看、删除虚拟环境及可能的报错处理

文章目录 前言(1) 在默认路径下创建一个新的虚拟环境(2) 查看已有的虚拟环境(3) 删除已有的虚拟环境(谨慎操作)(4)激活虚拟环境(5)退出…

OpenCV轻松入门(八)——图片卷积

对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所有位置,这个操作就叫卷积。 卷积需要4个嵌套循环,所以它并不快,除非我们使用很小的卷积核。这里一般使用3x3或者5x5 图像滤波 图像滤波是尽…

P9241 [蓝桥杯 2023 省 B] 飞机降落

原题链接:[蓝桥杯 2023 省 B] 飞机降落 - 洛谷 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 dfs全排列的变形题。 因为最后问飞机是否降落,并且一架飞机降落完毕时另一架飞机才能降落。所以我们设置dfs的两个变量cnt为安全…

通过adb 命令打印安装在第三方模拟器上的log

1,环境:Windows 11 ,第三方模拟器 网易的MuMu 步骤: 1,打开cmd,输入 adb connect 172.0.0.1:7555 2,在cmd,再次输入adb logcat 回车

案例分析-redis

案例需求:在7002这个slave节点执行手动故障转移,重新夺回master地位 步骤如下: 1)利用redis-cli连接7002这个节点 2)执行cluster failover命令 如图: 效果: 4.5.RedisTemplate访问分片集群 …