【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 {
    //测试0
    boolean 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;
        }
    }
    //测试1
    boolean 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;
        }
    }
    //测试2
    boolean 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());
        }
    }
}

·

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

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

相关文章

Power Apps 学习笔记 -- Action

文章目录 1. Action 简介2. Action 配置3. 待补充 1. Action 简介 Action基础教程 : Action概述 操作Action: 1. 操作Action类似于工作流Workflow&#xff0c;提供一些重用性的操作&#xff0c;允许工作流或其他Web服务端点调用(例如javascript). 2. Action 类似于c#当中的一个…

【电路笔记】-晶体管作为开关

晶体管作为开关 文章目录 晶体管作为开关1、概述2、截止区域3、饱和区域4、示例5、晶体管开关类型及应用5.1 数字逻辑晶体管开关5.2 PNP晶体管开关5.3 达林顿晶体管开关6、总结1、概述 晶体管开关可用于通过使用处于饱和或截止状态的晶体管来打开或关闭低压直流设备(例如 LED…

基于PLC的轨检小车控制器设计

摘要&#xff1a; 本文提出了轨道检测车的总体设计方案&#xff0c;首先设计出轨检车总体结构&#xff0c;轨检车主要结构有纵梁、横梁、行走机构、导向机构、支撑架、控制计算机、电机等组成。接着对电机进行选型&#xff0c;选择合适的步进电机及与其相匹配的驱动器来给轨检…

web端功能测试

web端功能测试 web项目环境说明环境的定义环境(服务器)的组成面试题&#xff1a;你们公司有几套环境 熟悉商城项目信息来源商城项目的核心业务商城项目的核心功能模块 测试流程的应用01需求评审02计划编写03设计用例04用例执行05缺陷管理06测试报告 商城项目测试01发货业务02评…

【CV论文阅读】【计算机视觉中的Transformer应用综述】(1)

0.论文摘要 摘要——自然语言任务的Transformer model模型的惊人结果引起了视觉社区的兴趣&#xff0c;以研究它们在计算机视觉问题中的应用。在它们的显著优点中&#xff0c;与递归网络例如长短期记忆&#xff08;LSTM&#xff09;相比&#xff0c;Transformer能够模拟输入序…

基于ACM32 MCU的两轮车充电桩方案介绍,有利于打造高效安全的电池管理

随着城市化进程的加快、人们生活水平的提高和节能环保理念的普及&#xff0c;越来越多的人选择了电动车作为代步工具&#xff0c;而两轮电动车的出行半径较短&#xff0c;需要频繁充电&#xff0c;因此在城市中设置两轮车充电桩就非常有必要了。城市中的充电桩不仅能解决两轮车…

二叉搜索树迭代器

题目链接 二叉搜索树迭代器 题目描述 注意点 初始指向根节点next()指向中序遍历中的下一个节点 解答思路 先中序遍历将节点存储到队列中&#xff0c;根据队列先进先出的特点&#xff0c;在调用next()方法时&#xff0c;返回队尾对应的节点并弹出即可 代码 class BSTIter…

SQLiteC/C++接口详细介绍-sqlite3类(一)

上一篇&#xff1a;SQLiteC/C接口简介 下一篇&#xff1a;SQLiteC/C接口详细介绍&#xff08;二&#xff09; 引言&#xff1a; SQLite C/C 数据库接口是一个流行的SQLite库使用形式&#xff0c;它允许开发者在C和C代码中嵌入 SQLite 基本功能的解决方案。通过 SQLite C/C 数据…

项目案例:多标签文本分类技术在司法行业的应用与挑战

一、引言 随着法律案件数量的激增以及对案件信息快速准确处理的需求日益迫切&#xff0c;司法行业对多标签文本分类技术的应用需求日益增长。本文将介绍多标签文本分类技术在司法行业的具体应用案例&#xff0c;探讨其如何助力法律专业人士处理繁杂的案件资料&#xff0c;优化…

pycharm全局搜索时切换到了繁体和出现乱码的解决方案

看别人代码过程中免不了使用全局 搜索 按照往常 “CtrlShiftF”进行全局搜索即可 但是第一次出现了繁体字&#xff0c;后面还出现乱码的情况了&#xff01; 1.繁体字解决方案 所以在 “设置-时间和语言-输入法选项-拼音选项-按键快捷键” 中修改 1.设置 2. 时间和语言 3.输…

Spring Cloud集成nacos配置中心

1.添加Nacos Config依赖 打开nacos-config-demo的pom.xml文件并添加以下两个依赖项 项目的配置文件中通常包括数据库连接配置项、日志输出配置项、Redis连接配置项、服务注册配置项等内容&#xff0c;如spring-cloud-alibaba-nacos-config-base-demo项目中就包含数据库连接配置…

Node.js作用

Node.js可以开发应用 开发服务器应用 开发工具类应用 开发桌面端应用

电脑怎样改变ip地址?三种方法任你选

更改电脑的IP地址是一个常见的需求&#xff0c;有时候我们可能需要调整网络设置以解决连接问题或保护隐私等。那么&#xff0c;电脑怎样改变ip地址&#xff1f;以下是几种简单快捷的方法任你选。 一、通过控制面板更改IP地址 在Windows操作系统中&#xff0c;可以通过控制面板…

代码生成器之如何快速生成后端接口?

前言 在现代软件开发中&#xff0c;重复性的增删改查逻辑代码的编写往往非常耗时且容易出错。为了提高开发效率&#xff0c;减少手动维护的成本&#xff0c;代码生成器就成为了一个非常重要的工具&#xff0c;本文小编就将为大家介绍一下如何利用一个开源项目快速生成数据接口…

vulhub中Weblogic SSRF漏洞复现

Weblogic中存在一个SSRF漏洞&#xff0c;利用该漏洞可以发送任意HTTP请求&#xff0c;进而攻击内网中redis、fastcgi等脆弱组件。 访问http://your-ip:7001/uddiexplorer/&#xff0c;无需登录即可查看uddiexplorer应用。 SSRF漏洞测试 SSRF漏洞存在于http://your-ip:7001/ud…

如何利用WebRTC构建点对点的即时通讯工具

在当今竞争激烈的商业环境中&#xff0c;企业越来越需要构建自己的即时通讯工具来提升内部沟通效率和信息安全&#xff0c;减少第三方工具依赖带来的潜在风险&#xff0c;并能与自身的行业业务深入融合。 拥有专用的通讯平台能够加快信息的流动&#xff0c;提升工作协同和任务执…

傅里叶变换算法和Python代码实现

傅立叶变换是物理学家、数学家、工程师和计算机科学家常用的最有用的工具之一。本篇文章我们将使用Python来实现一个连续函数的傅立叶变换。 我们使用以下定义来表示傅立叶变换及其逆变换。 设 f: ℝ → ℂ 是一个既可积又可平方积分的复值函数。那么它的傅立叶变换&#xff…

python-0002-linux安装pycharm

下载软件包 下载地址&#xff1a;https://download.csdn.net/download/qq_41833259/88944791 安装 # 解压 tar -zxvf 你的软件包 # 进入软件解压后的路径&#xff0c;如解压到了/home/soft/pycharm cd /home/soft/pycharm cd bin # 执行启动命令 sh pycharm.sh # 等待软件启…

【蓝桥杯嵌入式】四、各种外设驱动(三)NVIC中断程序通用步骤——分析与配置

由于内容比较多&#xff0c;为了更详细的说明&#xff0c;我也会花比较多的时间研究。而为了及时更新&#xff0c;我会把有些文章分成几个部分&#xff0c;谢谢大家理解 。 目录 一、需求分析 1、需要的外设资源分析&#xff1a; 2、外设具体分析&#xff1a; 3、软件分析 …

协议-http协议-基础概念04-长短连接-重定向-cookie-缓存-代理

参考来源&#xff1a; 极客时间-透视HTTP协议(作者&#xff1a;罗剑锋)&#xff1b; 01-长短连接 HTTP 协议最初&#xff08;0.9/1.0&#xff09;是个非常简单的协议&#xff0c;通信过程也采用了简单的“请求 - 应答”方式。 它底层的数据传输基于 TCP/IP&#xff0c;每次发…