当前位置: 首页 > news >正文

【JAVA重要知识 | 第七篇】Java异常知识总结(声明、抛出、捕获异常)

在这里插入图片描述

7.Java异常知识总结(声明、抛出、捕获异常)

7.1异常定义

  1. 在程序运行过程中,如果JVM检测出一个不可能执行的操作时,就会出现运行时错误(runtime error)。在Java中,运行时错误会作为异常抛出。
  2. 异常就是一种对象,表示阻止正常进行程序执行的错误或情况。如果异常没有被处理,那么程序将会非正常终止。

7.2异常类继承层次(与错误区分)

  1. 异常是对象,异常封装成类Exception,所有的异常都直接或间接继承自Throwable类。
  2. Throwable类有两个直接的子类,Error和Exception。
    1. 可以通过继承Exception或Exception的子类来创建自己的异常类。
    2. Exception是程序可以恢复的异常。如除零异常、空指针访问、网络连接中断、读取不存在的文件等。
    3. Exception类分为受检查异常和运行时异常
      • 受检查异常(必检异常):是除RuntimeException以外的异常,特点是编译器会强制程序员检查并通过try-catch块处理它们,或在方法头进行声明。如处理数据库异常的SQLException,处理读写异常的IOException
      • 运行时异常(免检异常):是继承RuntimeExceptionl类的直接或间接类。编译器不检查这类异常是否进行了处理,也就是对于这类异常不捕获也不抛出,程序也可以编译通过。一旦运行时异常时就会导致程序的终止。如访问一个数组的越界元素,会抛出一个IndexOutofBoundsException异常。

img

7.3异常的处理模型

Java的异常处理模型基于三种操作:

  • 声明一个异常
  • 抛出一个异常或者捕获一个异常

image-20240311111516403

7.3.1抛出异常(throws)

(1)throws关键字
  1. throws通常在方法首部的声明后抛出异常。

  2. throws抛出的是可能发生的异常。(并不一定会发生这些异常)

  3. 当该方法被调用的时候必须捕获,或者也可以再次抛出异常,最终由Java虚拟机处理。

  4. 用来声明一个方法可能产生的所有异常(用,分隔), 不做任何处理而是将异常往上传,谁调用我我就抛给谁

  5. 举例:

    class MyAnimation{  public Image loadImage(String s) throws IOException{...}
    }
    
(2)throw关键字
  1. throw关键字通常用在方法体中,并且抛出一个异常对象。

  2. throw则是抛出了异常,执行throw则一定抛出了某种异常

  3. 只能抛出一个异常对象

  4. 有两种方式捕获。要么自己捕获异常 try-catch 代码块,要么是抛出一个异常(throws 异常)

  5. 举例:

    String readData(Scanner in)throws EOFException{  while(...){    if(!in.hasNext())//遇到EOFException异常    if(n<len){      throw new EOFException();    }...  }
    }
    
(3)小结
  1. throw抛出一个异常对象时需要由函数的上层调用处理这个异常,此时,可以通过try-catch(finally)代码块,也可以通过throws进行抛出。(一定要处理)
  2. throws抛出一个可能的异常时可以不对此异常进行处理

7.3.2 捕获异常(try-catch-finally)

(1)try-catch-finally语句
try{//需要被检测的异常代码
}catch(Exception e){//异常处理,即处理异常的代码(打印异常信息并处理)
}finally{//一定会被执行的代码(通常可以进行资源的清除工作)
}
(2)try-catch语句
try{//需要被检测的异常代码
}catch(Exception e){//异常处理,即处理异常的代码(打印异常信息并处理)
}
(3)try-finally语句
try{//需要被检测的异常代码
}finally{//一定会被执行的代码(通常可以进行资源的清除工作)
}
(4)多catch语句
try{//需要被检测的异常代码
}catch(Exception e1){//异常处理,即处理异常的代码(打印异常信息并处理)
}catch(IOException e2){//异常处理,即处理异常的代码(打印异常信息并处理)
}	//可以通过catch处理多个异常。

7.3.3举例

public class TestException {//测试0boolean testEx() throws Exception{boolean res = true;try{res = testEx1();//执行}catch (Exception e){System.out.println("测试0,捕获异常");res = false;throw e;}finally{System.out.println("测试0, finally 最终返回的值 =" + res);return res;}}//测试1boolean testEx1() throws Exception{boolean res= true;try{res = testEx2();if (!res){return false;}return res;}catch (Exception e){System.out.println("测试1, catch捕获");res = false;throw e;}finally{System.out.println("测试1, finally最终返回值 =" + res);return res;}}//测试2boolean testEx2() throws Exception{boolean res = true;try{int b = 2;int c;for (int i = 2; i >= 0; i--){c = b / i;System.out.println("c="+c+"\ti=" + i);}return true;}catch (Exception e){System.out.println("测试2, catch捕获");res = false;throw e;}finally{System.out.println("测试2, finally最终值 =" + res);return res;}}
}//借鉴Angel_Kitty的例子

image-20240311145525739

7.4自定义异常

7.4.1自定义异常类

class CustomException extends Exception {private String customMessage;public CustomException(String message) {super(message);this.customMessage = message;}public String getCustomMessage() {return customMessage;}
}

7.4.2测试类—>并抛出自己的异常

class Example {public static void main(String[] args) {try {// 模拟条件触发自定义异常抛出int age = -1;if (age < 0) {throw new CustomException("年龄不能为负数");}} catch (CustomException e) {System.out.println("捕获到自定义异常:" + e.getCustomMessage());}}
}

·

相关文章:

【JAVA重要知识 | 第七篇】Java异常知识总结(声明、抛出、捕获异常)

7.Java异常知识总结&#xff08;声明、抛出、捕获异常&#xff09; 7.1异常定义 在程序运行过程中&#xff0c;如果JVM检测出一个不可能执行的操作时&#xff0c;就会出现运行时错误&#xff08;runtime error&#xff09;。在Java中&#xff0c;运行时错误会作为异常抛出。异…...

SSM整合项目(Vue3环境搭建)

SSM整合项目&#xff08;Vue3环境搭建&#xff09; 1.下载node.js 1.卸载原来的node.js 2.检测是否卸载成功 3.下载node.js&#xff08;10.16.3&#xff09; 一路next就可以 4.检测是否安装成功 2.全局安装Vue插件cli 命令行输入 npm install -g vue/cli 3.新建Vue项目 1.…...

Golang 方法的接收器 receiver 指针和值的区别

一、如果receiver是指针类型 package mainimport "fmt"type Count struct {count int }func main() {c : Count{count: 0}c.incr()fmt.Println(c.count)c2 : &cc2.incr()fmt.Println(c2.count) }func (c *Count) incr() {c.count }//打印结果 1 2 incr 方法的 …...

【蓝桥杯】节省时间

一、对于string类型变量的连接&#xff0c;可以直接用“”或者“”来进行字符串的直接连接 string a"1"; string b"2"; string c; cab"12"; string操作符两边既可以都是string类型&#xff0c;也可是string与char类型 注意&#xff1a; (1)“”…...

矩阵乘法--Strassen算法

一、矩阵乘法 从中可以看出&#xff0c;计算两个矩阵的乘积&#xff0c;需要三个 for 循环&#xff0c;可以简单写出代码&#xff1a; for(int i1;i<m;i)for(int j1;j<p;j)for(int k1;k<n;k)c[i][j]a[i][k]*b[k][j]; 时间复杂度的分析&#xff1a;很明显&#xff0c;…...

Unity笔记:C#基础(1)

杂项 虚函数 CSDN - C虚函数详解 cnblog - C#中的虚函数virtual 常量池与new 在C#中&#xff0c;string是不可变的&#xff0c;这意味着对string对象的操作通常会返回一个新的string对象&#xff0c;而不会修改原始的string对象。因此&#xff0c;几乎所有涉及更改string内…...

计算机科技与心理学的紧密交织:一场跨学科的深度对话

随着信息技术的飞速发展&#xff0c;计算机科学与心理学这两门看似迥异的学科日益呈现出密不可分的关系。本文将深入探讨计算机科学与心理学之间的相互影响和融合&#xff0c;揭示二者在研究方法、应用实践以及对未来社会发展的影响等方面的高度关联性。 计算机科学为心理学研究…...

【JAVA类】利用接口的多继承实现———图书管理系统【附源码】

引言 在我们学习了一些java的基础语法之后&#xff0c;需要把这些知识点可以串起来&#xff0c;这里使用一个简单的小项目可以很好的帮助我们牢记这些知识点&#xff0c;今天就带大家学习一个有关java的小项目&#xff0c;很多学校也经常把这个项目作为他们的课程设计——经典的…...

Linux进程概念僵尸进程孤儿进程

文章目录 一、什么是进程二、进程的状态三、Linux是如何做的&#xff1f;3.1 R状态3.2 S状态3.3 D状态3.4 T状态3.5 t状态3.6 X状态3.7 Z状态 四、僵尸进程4.1 僵尸进程危害 五、孤儿进程 一、什么是进程 对于进程理解来说&#xff0c;在Windows上是也可以观察到的&#xff0c…...

实体店如何引流成交裂变?打造流量新引擎的秘诀

在数字化浪潮席卷的今天&#xff0c;实体店经营面临着前所未有的挑战与机遇。社区店作为连接居民日常生活的桥梁&#xff0c;如何在激烈的市场竞争中脱颖而出&#xff0c;实现引流、成交与裂变&#xff0c;成为摆在每一位实体店创业者面前的重要课题。 作为一名鲜奶吧开店5年的…...

蓝桥杯(日期问题纯暴力)

纯纯暴力&#xff0c;写的想吐&#xff0c;玛德服了。 但是复习了vector去重方法&#xff0c;日期的合法性判断。 #include <iostream> #include <vector> #include <cstring> #include <algorithm>using namespace std; vector<int> res; st…...

ES: ES+Kibana 环境部署

ESKibana 部署 机器信息 10.10.8.62 10.10.8.63 10.10.8.64版本选择&#xff1a;6.8.1 基础环境优化 所有节点 # 关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service# 查看selinux getenforce # 关闭selinux setenforce 0 # 永久关闭se…...

Find My产品越来越得到市场认可,伦茨科技ST17H6x芯片赋能厂家

苹果发布AirTag发布以来&#xff0c;大家都更加注重物品的防丢&#xff0c;苹果的 Find My 就可以查找 iPhone、Mac、AirPods、Apple Watch&#xff0c;如今的Find My已经不单单可以查找苹果的设备&#xff0c;随着第三方设备的加入&#xff0c;将丰富Find My Network的版图。产…...

Linux系统——Haproxy高性能负载均衡软件

目录 一、Haproxy介绍 1.Haproxy定义 2.Haproxy主要特性 二、安装Haproxy 1.yum安装 2.第三方rpm包安装 3.编译安装 3.1解决Lua环境 3.2编译安装Haproxy 三、配置文件详解 1.状态页 2.日志管理 2.1定义日志到其他主机站点 3.指定进程线程个数 4.cpu亲缘性 5.多进…...

Python办公自动化之PDF(二)

Python操作PDF二 1、PyMuPDF简介2、 1、PyMuPDF简介 PyMuPDF&#xff08;也称Fitz&#xff09;开源&#xff0c;提供了一整套用于处理PDF文件的综合工具。使用PyMuPDF&#xff0c;用户可以高效地执行打开PDF、提取文本、图像和表格、操作旋转和裁剪等页面属性、创建新PDF文档以…...

登录失败重试次数安全设计方案

1、登录失败重试次数设计方案 1、无论是账号还是密码错误&#xff0c;统一提示&#xff1a;用户名或密码错误&#xff0c;账号剩余登录次数N&#xff01; 2、同一账号连续登录失败5次&#xff0c;锁定该账号5分钟&#xff0c;5分钟后可以再重试登录。 开发设计 key&#xff…...

Django——模板

Django——模板 Django 提供一种动态生成 HTML 页面 —— 模板 1、模板语言 模板语言(DTL): 变量 &#xff0c; 注释 &#xff0c; 标签 &#xff0c; 过滤器 &#xff0c; 模板继承 1、变量 <body> <!-- 这个是前端中的注释 --> {# 这种是Django中模板语言的…...

角蜥优化算法 (Horned Lizard Optimization Algorithm ,HLOA)求解无人机路径优化

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行时间和节省能量消耗。 二、算法介…...

Windows下 OracleXE_21 数据库的下载与安装

Oracle 数据库的下载与安装 数据库安装包下载数据库安装访问数据库进行测试Navicat连接数据库 1. 数据库安装包的下载 1.1 下载地址 Oracle Database Express Edition | Oracle 中国 1.2 点击“下载 Oracle Database XE”按钮&#xff0c;进去到下载页面&#xff08;选择对…...

新手如何快速上手学习单片机?

读者朋友能容我&#xff0c;不使博文负真心 新开专栏&#xff0c;期待与诸君共享精彩 个人主页&#xff1a;17_Kevin-CSDN博客 专栏&#xff1a;《单片机》 学习单片机是一个有趣且有挑战性的过程。单片机是一种微控制器&#xff0c;广泛应用于各种电子设备和嵌入式系统中。在这…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...