当前位置: 首页 > 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;广泛应用于各种电子设备和嵌入式系统中。在这…...

RexUniNLU开源NLU模型实战:金融研报关系抽取+事件时间线自动生成案例

RexUniNLU开源NLU模型实战&#xff1a;金融研报关系抽取事件时间线自动生成案例 1. 引言&#xff1a;当研报分析遇上智能信息抽取 想象一下这个场景&#xff1a;作为一名金融分析师&#xff0c;你刚收到一份长达50页的行业深度研究报告。你需要从中找出所有提到的公司、它们之…...

GPT-6 Spud倒计时与技术前瞻:AGI前夜的最后冲刺

上一篇 AI Agent记忆系统工程实践&#xff1a;四层架构、Mem0与跨会话状态持久化全解 下一篇 智谱GLM-4-0414系列开源发布深度解析&#xff1a;国产大模型新标杆 摘要 2026年4月14日&#xff0c;OpenAI代号"Spud"&#xff08;土豆&#xff09;的下一代旗舰模型GPT-6…...

别再为Containerd私有仓库的HTTPS报错头疼了,用ctr命令的--plain-http参数一键搞定镜像推送

Containerd私有仓库HTTPS报错的终极解法&#xff1a;ctr命令--plain-http实战指南 凌晨三点的告警铃声响起&#xff0c;屏幕上闪烁着熟悉的错误提示——http: server gave HTTP response to HTTPS client。这不是第一次在私有仓库镜像推送时遇到这个拦路虎了。每次修改containe…...

【仅限首批200位架构师开放】:AI原生软件研发日志分析平台建设沙盘推演手册(含混沌工程注入模板+SLI/SLO反向推导表)

第一章&#xff1a;AI原生软件研发日志分析平台建设概览 2026奇点智能技术大会(https://ml-summit.org) AI原生软件研发日志分析平台并非传统日志系统的简单升级&#xff0c;而是以大模型理解能力为内核、以研发语义为驱动、以实时反馈闭环为目标的新型可观测基础设施。该平台…...

智能验证码获取:从零构建自动化注册系统的技术深度解析

智能验证码获取&#xff1a;从零构建自动化注册系统的技术深度解析 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your tr…...

Swift高性能计算终极指南:Surge库快速入门教程

Swift高性能计算终极指南&#xff1a;Surge库快速入门教程 想要在Swift应用中实现高性能数学计算吗&#xff1f;Surge库是你的完美选择&#xff01;Surge是一个基于Accelerate框架的Swift高性能计算库&#xff0c;专门为矩阵运算、数字信号处理和图像处理提供优化的数学函数。…...

GLM-OCR轻量级专业OCR模型:快速部署与网页界面使用指南

GLM-OCR轻量级专业OCR模型&#xff1a;快速部署与网页界面使用指南 你是不是经常需要从图片、扫描件或者PDF里提取文字&#xff1f;手动打字太慢&#xff0c;用在线工具又担心文件安全和次数限制。今天要介绍的GLM-OCR&#xff0c;就是一个能让你彻底告别这些烦恼的解决方案。…...

微软开源TTS模型VibeVoice部署:网页界面推理,支持超长语音

微软开源TTS模型VibeVoice部署&#xff1a;网页界面推理&#xff0c;支持超长语音 1. 引言 1.1 语音合成新突破 在当今数字内容爆炸式增长的时代&#xff0c;语音合成技术正变得越来越重要。微软最新开源的VibeVoice TTS模型带来了革命性的进步&#xff0c;它能够生成长达96…...

从FP32到INT4:一次搞懂LLM推理中的KV Cache量化,选对方案省一半显存

从FP32到INT4&#xff1a;KV Cache量化技术选型与工程实践指南 在大型语言模型(LLM)推理部署的实际场景中&#xff0c;GPU显存资源往往是制约服务规模扩展的关键瓶颈。KV Cache作为Transformer架构中的核心优化机制&#xff0c;其显存占用会随着上下文长度的增加呈线性增长&…...

ExplorerPatcher终极指南:Windows界面定制的完整专业解决方案

ExplorerPatcher终极指南&#xff1a;Windows界面定制的完整专业解决方案 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher Windows界面定制工具…...