java基础知识——25.异常

news2024/11/25 10:48:40

这篇文章,我们来讲一下java的异常体系

目录

1.异常概述

2 java的异常继承体系

2.1 编译时异常

2.2 运行时异常

2.3 底层原理

2.4 异常的作用

3.异常的处理方式

3.1 JVM默认的处理方式

3.2 自己处理(捕获异常)

3.2.1自己处理的4个问题

3.2.2 异常中的常见方法

3.3 抛出处理

3.3.1 throws

3.3.2 throw

4.小结


1.异常概述

首先,我们来认识一下异常

异常:异常就是代表程序出现的问题

注意:我们学习异常不是让我们以后写代码不出现异常,而是程序出了异常之后,我们应该如何处理

下面举个例子,来看一下异常:

 java中有许多异常,上面举的只是两个简单的例子而已

2 java的异常继承体系

java中有许许多多的异常,这些异常组成了java的异常体系,下面来看一下:

下面来详细的说一下各个部分

  • Error:代表的系统级别错误(属于严重问题)系统一旦出现问题,sun公司会把这些错误封装成Error对象。Error是给sun公司自己用的,不是给我们程序员用的。因此,我们开发人员不用管它
  • Exception:叫做异常,代表程序可能出现的问题。我们通常会用Exception以及它的子类来封装程序出现的问题
  • 运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。运行时出现的异常(如:数组索引越界异常)
  • 编译时异常:编译阶段就会出现异常提醒(如日期解析异常)

 注意:异常体系的最上层父类是Exception,而不是java.lang.Throwable

2.1 编译时异常

编译时异常,就是我们在写代码时,不运行就会出现的错误,idea中会用红色波浪线标记出来,如果我们不出来,则代码运行不了。

下面,我们通过具体的实例来看一下:

如上图所示,这就是编译时异常,我们可以进行相应的异常处理:

然后就可以正常运行了:

 编译时异常是很好解决,我们可以直接在主方法上抛出异常就行

2.2 运行时异常

运行时异常就是RuntimeException及其子类,在编译阶段不会是出现异常提醒的。它运行时出现的异常(如:数组索引越界异常)

 下面还是通过具体实例来看一下:

然后,我们运行看一下:

就会出现红色错误,然后指出错误类型,指出具体位置

这就是运行时异常。

2.3 底层原理

 下面,我们来看一下为什么会出现编译异常和运行时异常两种异常

而我们的编译器在编译阶段,java是不会运行代码的,它只会检查语法是否有错误,或者做一些优化,所以就会出现这两种异常

2.4 异常的作用

下面,讲一下异常的作用

作用一:异常是用来查询bug的关键参考信息

作用二:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

这里就不举具体例子了

3.异常的处理方式

上面讲了异常的概念,异常体系,下面我们来讲一下异常的处理方式

异常的处理方式有三种,分别是:JVM默认的处理方式,自己处理,抛出异常

3.1 JVM默认的处理方式

当我们的代码中有异常的时候,如果我们没有自己处理,没有抛出异常,那么就会采用JVM的默认处理方式来处理

JVM的默认处理方式是这样的:

  • 把异常的名称,异常原因以及异常出现的位置等信息输出在了控制台
  • 程序停止运行,下面的代码就不会运行

下面看一下具体实例:

3.2 自己处理(捕获异常)

下面我们来看一下异常处理的第二种方式:自己处理

它的格式如下:

try{
    可能出现异常的代码;
}catch(异常类 异常名){
    异常的处理代码;
}

 这样的目的:当代码出现异常时,可以让程序继续往下运行

下面通过具体实例来看一下:

再看一下结果:

 

下面,我们就上面的这个代码,来分析一下它的具体执行过程

首先,程序进入到 try 里面,执行try里面的代码,如果出现了异常,它就会创建出相应的异常类对象,比如我们这里出的是索引越界异常,也就是ArrayIndexOutOfBoundsException异常,所以它就会创建一个ArrayIndexOutOfBoundsException异常对象,然后拿着这个对象到catch的小括号中进行比较,看括号中的变量能否接收这个对象(Exception是所有异常的父类),如果可以接收,那么就执行catch里面的代码,如果不可以接收,就会在编译时报错。这就是它的执行流程。

3.2.1自己处理的4个问题

下面,关于自己处理异常这种方式,或者说try { } catch( ) { } 这个方式,提几个问题。

问题一:如果try中没有遇到问题,怎么执行?

答:执行try中的代码,catch中的代码不执行

注意:只有出现异常,才会执行catch中的代码

看实例:

 

问题二:如果try中可能会遇到多个问题,怎么执行?

答:但凡try中出现异常,并且异常被捕获,那么就会执行catch,然后继续执行下面的代码,不会管其他的异常

注意:try中但凡出现一个异常,就会跳过try的部分

看实例:

 

 

问题三:如果try中遇到的问题没有被捕获,怎么执行?

答:那么程序会报错,以红色字体将错误打印在控制台,并且下面的代码不会继续执行

看实例:

 

问题四:如果try中遇到了问题,那么try下面的其他代码还会执行吗?

答:不会继续执行

注意:这种情况就相当于try白写了,异常就会交给JVM默认处理

看实例:

3.2.2 异常中的常见方法

在上面的案例中,当我们自己捕获到异常时,我们会定义一个异常类的对象e,然后在catch里面随意写点东西,这只是为了演示方便才这样做的。其实异常类里面有许多方法,下面就介绍几个常用的方法:

这些方法我们都可以通过异常类对象e来调用,下面演示一个案例:

 

3.3 抛出处理

抛出处理就是自己手动写抛出语句,将异常抛出。

抛出处理涉及到2个关键字,分别是 throws,throw;下面分别来看一下

3.3.1 throws

throws:写在方法的定义处,表示声明一个异常,作用是告诉调用者,使用本方法可能会出现哪些异常

注意:编译时的异常必须要写,运行时异常可以不写

格式如下:

public void 方法() throws 异常类名1,异常类名2……{

}

下面看一下具体实例:

因为没做其他处理,所以就是默认的输出这个异常 

3.3.2 throw

throw:写在方法内,结束方法,它是手动抛出异常对象,交给调用者,方法下面的代码不再执行了

格式如下:

public void 方法{
    throw new 异常类名();
}

下面看一下具体实例:

 

4.小结

这篇文章我们讲了一下异常。介绍了什么是异常,java的异常体系结构,和对异常的三种处理方法。都比较重要,都需要掌握。其实内容很简单,就是出错了,捕获它,匹配它,处理它,然后继续执行后面的代码。一般的处理方式就是输出打印它。

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

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

相关文章

端到端NVMe?| NVMe-OF或FC-NVMe

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 NVMe全称是Nonvolatile Memory Express(非易失性内存标准),在它首次…

( 字符串) 647. 回文子串 ——【Leetcode每日一题】

❓647. 回文子串 难度:中等 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使…

JSP 的本质原理解析:“编写的时候是JSP,心里想解读的是 java 源码“

JSP 的本质原理解析:“编写的时候是JSP,心里想解读的是 java 源码” 文章目录 JSP 的本质原理解析:"编写的时候是JSP,心里想解读的是 java 源码"每博一文案1. JSP 概述2. 第一个 JSP 程序3. JSP 的本质就是 Servlet4. J…

appium的手动安装步骤教程及appium-doctor报错解决集合

前言 相信你不少软件测试行业小伙伴应该在用npm安装appium或者是cpm安装appium途中也碰到下面一些报错吧,接下来Darren洋教你改为手动安装appium吧!整理不易,请点赞加关注后查看。 一、安装Node.js 下载地址: Previous Releases …

【五一创作】某头条参数破解并实现界面化搭建

某条参数破解并实现界面化搭建 前言效果展示难点参数逆向破解_signatureac_signatures_v_web_id 界面化实现总结 前言 趁着日常闲余时间,想着搞一搞某条的反爬,练练手,想到自己很久没开发过前端界面了,有点生疏,也趁此…

PCL学习二:PCL基础应用教程

参考引用 PCL Basic UsagePCL 点云库官网教程 1. pcl_viewer 基本使用 1.1 pcl_viewer 安装测试 pcl_data 源码克隆$ git clone https://github.com/PointCloudLibrary/data.git进入 /pcl_data/tutorials(如下图)$ cd ~/pcl_data/tutorials # 此处为重…

IDEA常用提升效率的操作小记

IDEA目前是使用最广泛的Java开发工具之一了,虽然是收费的,但是也提供了免费的社区版,并且收费版也支持使用github的开源项目,使用免费license,虽然每年都要续,我用的就是开源项目申请的免费license。 开发…

【Pytorch基础教程39】torch常用tensor处理函数

note 文章目录 note一、tensor的创建二、tensor的加减乘除三、torch.argmax()函数四、gathter函数小栗子1小栗子2:如果每行需要索引多个元素: 四、针对某一维度的操作五、改变维度、拼接、堆叠等操作Reference 一、tensor的创建 torch.tensor会复制data…

STM32配置ADC2(DMA)进行采集 DAC 输出-2

0.一定要先看上一节:STM32配置ADC2(DMA)进行采集 DAC 输出-2 1.实验目标 在上一节的基础上,我们把 DAC(三角波)给集成进来,实现按下按键输出三角波,通过串口发送数据给电脑&#x…

Apache Zeppelin系列教程第二篇——整体架构

Zeppelin 架构: 首先我们来了解下 Zeppelin的架构, Zeppelin 主要分3层。 Web前端 Zeppelin Server Interpreter Zeppelin前端负责前端页面的交互,通过Rest API 和WebSocket的方式与Zeppelin Server进行交互。 Zeppelin Server是一个Web server&…

【python 基础语法一】注释,变量与运算符

一、注释 注释: 就是对代码的解释,方便阅读,被注释的代码不执行 分类 单行注释 # 1.单行注释 以#号开头 ,右边的所有东西都被当做说明文字 ,程序不进行编译运行。 print(hello world)多行注释 # 2.多行注释 三个单引号 或…

Sentinel源码分析学习

文章目录 前言Sentinel源码分析1.Sentinel的基本概念1.1.ProcessorSlotChain1.2.Node1.3.Entry1.3.1.自定义资源1.3.2.基于注解标记资源 1.4.Context1.4.1.什么是Context1.4.2.Context的初始化1.4.2.1.自动装配1.4.2.2.AbstractSentinelInterceptor1.4.2.3.ContextUtil 2.Proce…

django显示echart图表:柱状图、折线图、饼图、地图、词云

django显示echart图表 效果: 示例demo 点我查看 1、urls.py 其中关键代码: urlpatterns = [path("book_chart/", views.book_chart, name="book_cha

LINUX压缩和解压和磁盘管理与维护命令

文章目录 一、压缩和解压命令二、磁盘管理与维护命令总结 一、压缩和解压命令 Linux zip命令:压缩文件或目录 Linux unzip命令:解压文件或目录 Linux tar命令:归档工具 二、磁盘管理与维护命令 Linux df命令:显示磁盘空间使用情况 Linux mount命令:挂载文件系统 Linux quota命…

APK文件结构

文件结构 assets文件用来存放需要打包到Android 应用程序的静态资源文件,例如图片资源文件,JSON配置文件,渠道配置文件,二进制数据文件,HTML5离线资源文件等 与res/raw目录不同的数,assets目录支持任意深度…

数位dp。

一,思想: 在处理1e9甚至1e18,1e100的问题时,因为在统计情况下有很多重复的计算,数位dp实现了相同状态只计算一次,从而大幅减少运算时间,思想就是对每一位进行dp,计算时记忆化每一位可以有的状态…

HashMap机制

反思 HashMap之前只是面试时会看下面试题,但实际从没有撸过源码,对于工作多年的菜鸟来说,对技术不尊重,整理了篇文档,记忆加深一下 原理 假如让我们来设计HashMap实现,我们如何设计一个key->value键值…

4.7排序(C语言)

1.八大排序 加一个计数排序(时间复杂度为O(n), 空间复杂度为O(max(n, range),非比较排序)。 2.希尔排序 3.三个O(n^2)的排序的比较 4.归并排序和快速排序 非递归: 5.排序比较 注意: 下面4种高效排序中&…

【Git】篇一

文章目录 一、Git概述1、版本控制器的方式2、Git的工作流程图 二、Git的安装与常用命令1、Git环境安装2、Git环境基本配置3、获取本地仓库4、基础操作指令 三、分支 一、Git概述 开发中,代码备份、代码还原回滚、追溯、协同开发等场景必不可少,由此&…