【javaSE】认识异常(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。而这五个关键字要讲解的话要讲很久,所以我们就放到下篇文章里。

 总结

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

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

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

相关文章

联丰策略股票杠杆股票交易市场突破3100点!A股稳了?

查查配近期,大盘再次来到3100点附近。 重要关口得到有效突破,市场情绪明显升温,甚至有投资者高喊:反转已经在路上!但也有谨慎者认为,市场仍有回调风险,围绕3000点震荡或是接下来的主旋律。 联丰策略拥有一支由知名互联网公司和国内证券金融机构的行业专家组成的一流运营团队。…

HTML炫酷的相册

目录 写在前面 HTML简介 完整代码 代码分析 系列推荐 写在最后 写在前面 本期小编给大家带来一个炫酷的旋转相册,快来解锁属于你的独家记忆吧! HTML简介 HTML(全称为超文本标记语言)是一种用于创建网页结构和内容的标记语…

Python 编程语言中的 None 到底是什么?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 让我们一起深入了解 Python 中的 None。 什么是 None? 在 Python 编程语言中,None 是一个特殊的常量,它代表了 “无” 或 “没有值”。你可以把它想象成一个空盒子…

日本率先研发成功6G设备,刺痛了谁?为何日本能率先突破?

日本率先研发成功6G设备,无线数据速率是5G的百倍,这让日本方面兴奋莫名,毕竟日本在科技方面从1990年代以来太缺少突破的创新了,那么日本为何如今在6G技术上能率先突破呢? 日本在1980年代末期达到顶峰,它的科…

电商数据都能采集监测吗

品牌在做市场分析、渠道控价时,一般都需要先采集电商数据,数据的采集,不是只涉及部分平台,分析的准确和控价的全面性,使得数据的要求也会被提高,品牌要能采集不同平台、不同店铺的SKU数据,同时还…

【IMX6ULL项目】IMX6ULL上Linux系统实现产测工具框架

电子产品量产测试与烧写工具。这是一套软件,用在我们的实际生产中, 有如下特点: 1.简单易用: 把这套软件烧写在 SD 卡上,插到 IMX6ULL 板子里并启动,它就会自动测试各个模块、烧写 EMMC 系统。 工人只要按…

Scratch四级:第08讲 排序算法

第08讲 排序算法 教练:老马的程序人生 微信:ProgrammingAssistant 博客:https://lsgogroup.blog.csdn.net/ 讲课目录 常考的排序算法项目制作:“三个数排序”项目制作:“成绩查询”项目制作:“排序”项目制…

使用LLaMA Factory来训练智谱ChatGLM3-6B模型

使用LLaMA Factory来训练智谱ChatGLM3-6B模型时,以下是一个训练过程: 1. 环境搭建 a. 安装Python和Anaconda 下载并安装适合你操作系统的Python版本(推荐Python 3.10或更高版本)。安装Anaconda,以管理Python环境和依…

“等保测评通过指南:打造企业安全生态环境“

等保测评,即网络安全等级保护测评,是企业构建安全生态环境的重要环节。以下是通过等保测评的指南,旨在帮助企业打造一个安全的网络环境: 理解等保测评的重要性: 等保测评是确保企业信息系统安全得到有效保护的重要标准…

轻松上手Spring AOP,掌握切面编程的核心技巧

文章目录 AOP 是什么AspectJSpring AOP切点表达式execution()语法结构示例注意事项 通知(Advice)类型如何使用准备阶段定义切面定义并使用切点测试 总结 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍…

轨迹规划 | 图解纯追踪算法Pure Pursuit(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 纯追踪算法原理推导2 自适应纯追踪算法(APP)3 规范化纯追踪算法(RPP)4 仿真实现4.1 ROS C仿真4.2 Python仿真4.3 Matlab仿真 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划…

Android面试题之Kotlin和Java之间互操作

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 互操作性和可空性 要注意Java中所有类型都是可空的String!表示平台数据类型 public class JavaTest {public String generateName() {return …

瞬息全宇宙——平行宇宙终极教程,手把手教你做出百万点赞视频

最近一种叫“瞬息全宇宙”的视频火了,抖音一期视频百万赞,各个博主视频都在带瞬息全宇宙这个标签,于是就有很多朋友催我出教程了,在琢磨了几天之后,终于整出来了 教程包含了插件的安装,界面的讲解&#xff…

for 双重循环

一.双循环: 可以使用嵌套循环来实现脚本的双层循环,示例代码如下 1.显示外循环是$a 内循环$b encho -e \t 是制表符 2.9 9乘法表 for 循环: echo -n是不换行输出 while循环: 3.输出长度宽度都为9个星的矩形 for循环 while循环 …

开发者出海时都在用哪些组件库?

❝ 哈喽👋,我是树酱。今天我要介绍的是在开发者出海时经常使用的组件库。这些组件库大多采用Tailwind CSS作为基础,它们不仅风格独树一帜,而且外观也非常吸引人! 1.Shadcn-ui shadcn的风格跟Notion风格很像&#xff0c…

博客互动革命:如何打造活跃读者社区并提升参与度

CSDN 的朋友你们好,我是未来,今天给大家带来专栏【程序员博主教程(完全指南)】的第 10 篇文章“与读者互动”。本文揭示了提升技术博客参与度的秘诀。从评论互动到社交媒体策略,本文将指导你如何建立强大的读者社区。掌…

编程技巧:什么是JavaScript递归

什么是递归 程序调用自身的编程技巧称为递归(recursion) 递归的基本思想是将一个复杂的问题分解成更小、更易于管理的子问题,这些子问题与原始问题相似,但规模更小。 递归的要素 基本情况(Base Case)&…

【C语言 | 数据结构】栈

文章目录 前言1、栈1.1栈的概念和定义1.1.2栈的基本概念: 1.2栈的方法(接口)1.3栈的实现方法1.4栈的性质1.5栈的应用1.6栈的结构 2、栈的实现2.1 顺序栈2.1.1 顺序栈的结构体2.1.2 顺序栈的初始化2.1.3 顺序栈的销毁2.1.4 顺序栈的入栈2.1.5 顺序栈的出栈2.1.5 顺序…

聚观早报 | 比亚迪海狮07 EV上市;苹果将升级Siri

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 5月13日消息 比亚迪海狮07 EV上市 苹果将升级Siri OpenAI开发全新技术 沃尔沃EX30车型将上市 SpaceX计划新建发…

template——模板进阶(C++)

在之前的文章中,介绍了模板初阶:Cpp_桀桀桀桀桀桀的博客-CSDN博客 在本篇中将会对模板进一步的讲解。本篇中的主要内容为:非类型模板参数、函数模板的特化、类模板的特化(其中包含全特化和偏特化),最后讲解…