分享两个概念:非受检异常和受检异常

分享两个概念:非受检异常和受检异常

愿你的每一天都充满阳光和笑声,愿每一步都是轻松与愉快。在新的旅程中,愿你找到勇气攀登高峰,找到智慧化解困境。

愿你的心中充满温暖和善意,愿你的梦想如彩虹般美丽且真实。愿你发现生活中的小确幸,懂得感恩每一个瞬间。

在这里插入图片描述

非受检异常

"非受检异常"通常指的是在编程中发生的一些异常情况,这些异常情况通常不会在代码中明确声明或捕获,因此被称为“非受检异常”或“运行时异常”。

在Java中,非受检异常通常是RuntimeException及其子类的实例。与受检异常(checked exception)不同,非受检异常不需要在方法签名中显式声明,也不需要使用try-catch块来捕获或处理。这使得开发者可以更灵活地处理异常情况,但也需要更加小心,因为这些异常往往反映了程序中的逻辑错误或运行时环境的问题。

以下是一些常见的非受检异常的例子:

  1. NullPointerException(空指针异常): 当试图在一个空对象上调用方法或访问属性时,会抛出NullPointerException。

    String str = null;
    int length = str.length();  // 这里会抛出NullPointerException
    
  2. ArrayIndexOutOfBoundsException(数组越界异常): 当尝试访问数组中不存在的索引时,会抛出ArrayIndexOutOfBoundsException。

    int[] array = {1, 2, 3};
    int value = array[5];  // 这里会抛出ArrayIndexOutOfBoundsException
    
  3. ArithmeticException(算术异常): 当进行不合法的算术运算时,会抛出ArithmeticException。

    int result = 10 / 0;  // 这里会抛出ArithmeticException
    

对于非受检异常,通常的建议是在程序中尽量避免引发这些异常,因为它们通常表示代码中存在问题。此外,如果确实发生了非受检异常,最好的处理方式是让程序崩溃并尽快修复代码,而不是试图捕获并继续执行可能处于不确定状态的程序。

受检异常

与非受检异常相对的概念是受检异常(Checked Exception)。受检异常是在Java中的异常体系中的一类异常,它们是Exception的直接子类,但不是RuntimeException的子类。与非受检异常不同,受检异常在代码中必须进行明确的声明或捕获,否则编译器会报错。

受检异常通常表示一些在程序中可能会发生的、需要程序员注意和处理的异常情况,例如文件不存在、网络连接失败等。这种异常的出现不一定是代码错误,但程序员需要通过try-catch块或者在方法签名中使用throws关键字明确地处理这些异常。

以下是一些受检异常的例子:

  1. IOException(输入输出异常): 表示在输入输出操作中可能发生的异常情况,比如文件读写时可能发生的错误。

    try {FileReader fileReader = new FileReader("example.txt");// 读取文件内容
    } catch (IOException e) {e.printStackTrace();
    }
    
  2. SQLException(SQL数据库访问异常): 表示在与数据库交互时可能发生的异常,比如执行SQL查询时出现问题。

    try {// 执行数据库查询
    } catch (SQLException e) {e.printStackTrace();
    }
    
  3. ClassNotFoundException(类未找到异常): 表示在运行时无法找到所需的类。

    try {Class<?> clazz = Class.forName("com.example.MyClass");
    } catch (ClassNotFoundException e) {e.printStackTrace();
    }
    

总结

非受检异常(Unchecked Exception)和受检异常(Checked Exception)是 Java 编程语言中异常的两个主要类别。它们在处理和捕获方式上有一些重要的区别。

非受检异常(Unchecked Exception):

  1. 继承关系: 非受检异常是 RuntimeException 类及其子类的实例。
  2. 编译时检查: 不需要在方法签名中显式声明或捕获,编译器不会强制要求进行异常处理。
  3. 触发条件: 通常表示程序中的逻辑错误或运行时环境的问题,例如空指针异常(NullPointerException)或数组越界异常(ArrayIndexOutOfBoundsException)。
  4. 不强制处理: 程序员通常不需要捕获或声明处理非受检异常,而是更倾向于修复代码中的问题。

受检异常(Checked Exception):

  1. 继承关系: 受检异常是 Exception 类及其子类中除了 RuntimeException 及其子类的实例。
  2. 编译时检查: 必须在方法签名中显式声明,或者使用 try-catch 块来捕获,否则编译器会报错。
  3. 触发条件: 通常表示程序可能会在运行时遇到的一些合理的、可预测的异常情况,例如文件不存在(FileNotFoundException)或数据库连接失败(SQLException)。
  4. 强制处理: 程序员必须在代码中进行明确的异常处理,以确保程序在面临异常时有合适的应对方式,提高程序的稳定性和可靠性。

非受检异常通常反映了程序中的错误,而受检异常则通常表示程序可能在正常运行中遇到的一些可预测的异常情况。在处理异常时,程序员需要根据具体情况选择适当的方式来处理异常,保证程序的健壮性。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外汇天眼:CQG 与 TradeStation Securities 的经纪服务集成

TradeStation Securities, Inc.&#xff0c;一家自营的在线股票、ETF、期权和期货交易经纪公司&#xff0c;宣布与CQG合作&#xff0c;CQG是一家为交易员、经纪商、商业套保者和交易所提供高性能技术解决方案的全球供应商&#xff0c;已与TradeStation Securities的经纪服务集成…

零基础学习数学建模——(二)数学建模的步骤

本篇博客将详细介绍数学建模的步骤。 文章目录 引例&#xff1a;年夜饭的准备第一步&#xff1a;模型准备第二步&#xff1a;模型假设第三步&#xff1a;模型建立第四步&#xff1a;模型求解第五步&#xff1a;结果分析第六步&#xff1a;模型检验第七步&#xff1a;模型应用及…

JVM基础(1)——JVM类加载机制

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

星耀新春,集星探宝,卡奥斯开源社区双节活动上线啦!

卡奥斯开源社区龙年新春专题活动上线啦&#xff01; “星耀新春&#xff0c;集星探宝”&#xff0c;卡奥斯开源社区龙年新春专题活动重磅发布&#xff01; 写文章、发项目、建应用、做测评&#xff0c;玩转盘、开宝箱 6大活动板块陪你玩儿转双节&#xff01; 扫地机器人、家…

计算机导论03-计算机组成

计算机系统结构 冯•诺依曼体系结构 冯•诺依曼体系结构的基本要点 冯•诺依曼思想即冯•诺依曼体系结构思想&#xff0c;其最基本的概念是存储程序概念&#xff0c;它奠定了现代计算机的结构基础。 功能部件: 计算机必须具备五大基本组成部件&#xff0c;包括&#xff1a;运…

使用git submodule解决高耦合度问题

引言 在开发我的笔记系统时&#xff0c;我遇到了一个问题。问题是&#xff0c;在api-gate服务中&#xff0c;我需要验证用户的access_code&#xff0c;但是access_code的生成逻辑是在auth2服务中实现的。这个问题从架构设计的层面上看&#xff0c;就是一个高耦合度问题。高耦合…

C++重新认知:namesapce

0、引言 为什么要用到命名空间 想必我们在写C语言时经常在main.cpp文件内写下using namespace std 这句代码&#xff0c;这句代码有何作用呢&#xff1f; 其实写上这句代码后&#xff0c;我们就会使用std的命名空间。 好处&#xff1a;可以帮我们节省很多不必要的代码&#…

jmeter性能测试常用并发线程组

每秒完成事务数&#xff1a;作用是统计各个事务每秒钟成功的事务个数添加方式&#xff1a;测试计划 --> 线程组--> 监听器-->Transactions per Second 每秒字节吞吐量&#xff1a;作用是查看服务器吞吐流量&#xff08;单位/字节&#xff09;添加方式&#xff1a;测试…

VSCode使用MinGW编译器,配置C/C++环境

目录 一、安装VSCode 二、安装MinGW编译器 1、配置环境变量 2、测试配置是否成功 三、配置VSCode 1、安装所需扩展 2、新建代码存放文件夹 3、添加配置文件 4、配置文件内容 &#xff08;1&#xff09;c_cpp_properties.json &#xff08;2&#xff09;launch.json …

IPv6路由协议---IPv6动态路由(OSPFv3-4)

OSPFv3的链路状态通告LSA类型 链路状态通告是OSPFv3进行路由计算的关键依据,链路状态通告包含链路状态类型、链路状态ID、通告路由器三元组唯一地标识了一个LSA。 OSPFv3的LSA头仍然保持20字节,但是内容变化了。在LSA头中,OSPFv2的LS age、Advertising Router、LS Sequence…

three.js : tweenjs创建threejs动画

效果&#xff1a; 代码 <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div> <div class"box-right"><…

Thrift接口测试实践

Thrift是Facebook实现的一种高效的并且支持多种主流编程语言的远程服务调用的框架&#xff0c;Thrift服务器包含了用于绑定协议和传输层的基础架构&#xff0c;也是基于HTTP/2.0的版本实现&#xff0c;Thrift提供阻塞&#xff0c;非阻塞&#xff0c;单线程&#xff0c;多线程的…