2023.8 - java - Java 异常处理

news2024/11/25 11:01:59

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出 java.lang.ArithmeticException 的异常。

异常发生的原因有很多,通常包含以下几大类:

  • 用户输入了非法数据。
  • 要打开的文件不存在。
  • 网络通信时连接中断,或者JVM内存溢出。

这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。-

要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:

  • 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
  • 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
  • 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

Exception 类的层次

所有的异常类是从 java.lang.Exception 类继承的子类。

Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。

Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。

Error 用来指示运行时环境发生的错误。

例如,JVM 内存溢出。一般地,程序不会从错误中恢复。

异常类有两个主要的子类:IOException 类和 RuntimeException 类。

 

 NullPointerException(空指针异常)

是一种常见的运行时异常,通常在Java和其他类似的编程语言中出现。它表示在代码中尝试访问一个空(null)引用的对象时发生了错误。 当你尝试调用一个空引用的方法、访问空引用的属性或者使用空引用执行其他操作时,就会抛出NullPointerException。这通常是由于以下几种情况导致的:

1. 未初始化的引用:如果你尝试使用一个未初始化(赋予null值)的引用,就会抛出空指针异常。
String str;
System.out.println(str.length()); // 会抛出 NullPointerException
2. 调用空引用的方法:如果你尝试调用一个空引用的方法,就会抛出空指针异常。
String str = null;
System.out.println(str.length()); // 会抛出 NullPointerException
3. 对象引用为null:如果你尝试访问一个对象引用的属性或执行其他操作时,而该对象引用为null,就会抛出空指针异常。
String str = null;
System.out.println(str.toUpperCase()); // 会抛出 NullPointerException
为了避免空指针异常,你应该始终确保在使用引用之前,对其进行初始化或者检查其是否为null。可以使用条件语句(如if语句)来检查引用是否为null,或者使用可空类型(如Java 8的Optional)来处理可能为空的引用。
String str = null;
if (str != null) {
    System.out.println(str.length());
} else {
    System.out.println("str is null");
}

 

OutOfMemoryError(内存溢出错误)
是一种Java运行时错误,表示应用程序在尝试分配内存时无法满足需求,导致内存耗尽。当Java虚拟机(JVM)无法分配更多的内存给应用程序时,就会抛出OutOfMemoryError。

OutOfMemoryError通常由以下几种情况引起:

1. 内存泄漏:当应用程序持续分配内存,但无法释放不再使用的对象时,会导致内存泄漏。随着时间的推移,可用内存逐渐减少,最终导致内存溢出。

2. 大对象或大量对象:如果应用程序需要分配大量的内存来创建大对象或大量的对象,而可用内存不足以容纳它们,就会引发OutOfMemoryError。

3. 递归调用:如果一个递归函数的递归层数过多,每个递归调用都会在堆栈中创建一个新的栈帧,当栈空间耗尽时,就会抛出OutOfMemoryError。

处理OutOfMemoryError的方法取决于具体的情况:

1. 内存泄漏:通过仔细检查代码,确保及时释放不再使用的对象,并使用合适的数据结构和算法来最小化内存占用。

2. 大对象或大量对象:考虑使用对象池或缓存来重复使用对象,避免频繁地创建和销毁对象。

3. 递归调用:优化递归算法,确保递归层数不会过多,或者改为使用迭代循环来替代递归。

 

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

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

相关文章

2023年高教社杯数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米,宽为12米&…

缓存穿透、缓存击穿和缓存雪崩

👏作者简介:大家好,我是爱发博客的嗯哼,爱好Java的小菜鸟 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝社区论坛:希望大家能加入社区共同进步…

Linux:LAMP架构与论坛搭建

目录 一、动态资源与语言 二、LAMP 架构的组成 三、CGI和astcgi 3.1CGI​​​​​​ 3.2fastcgi 3.3CGI和fastcgi比较 3.4 PHP 配置 3.5 Opcode语言 四、编译安装Apache http 服务 五、安装论坛 一、动态资源与语言 WEB 资源类型: 静态资源:原…

idea的debug断点的使用

添加断点(目前不知道如何添加断点,就给AutoConfigurationImportSelector的每个方法都加上断点): 然后将StockApplication启动类以debug方式运行,然后程序就会停在119行 点击上边的step over让程序往下运行一行&#x…

如何利用IPIDEA代理IP提高运营效率和安全性

Tiktok印尼用户的每月访问时间长达28.7小时,访问时间远远超过其他社交媒体(FB15.5小时,INS7.8小时)。TikTok Shop在印尼的市场份额跃升,赶超Tokopedia和Lazada。在Tiktok运营中,代理IP可以发挥哪些作用呢&a…

Java“牵手”天猫商品列表数据,关键词搜索天猫商品数据接口,天猫API申请指南

天猫商城是一个网上购物平台,售卖各类商品,包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取天猫商品列表和商品详情页面数据,您可以通过开放平台的接口或者直接访问天猫商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…

基于风险的漏洞管理

基于风险的漏洞管理涉及对即将被利用的漏洞的分类响应,如果被利用,可能会导致严重后果。本文详细介绍了确定漏洞优先级时要考虑的关键风险因素,以及确保基于风险的漏洞管理成功的其他注意事项。 什么是基于风险的漏洞管理对基于风险的漏洞管…

N皇后【回溯】

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种…

应用3:VBA中字符串值的比较方案

【分享成果,随喜正能量】活得通透的人 ,没有特别想维持的关系 ,也没有特别想要的东西 ,走近的人不抗拒 ,离开的人不强留 ,就连吃亏也懒得计较。。 《VBA经典应用69例》(10178981)&a…

Linux系统安装与配置Anaconda

Linux系统安装与配置Anaconda 下载Linux系统的Anaconda安装包安装Anaconda将Anaconda加入到环境变量测试Anaconda是否安装成功 下载Linux系统的Anaconda安装包 这里提供2种下载方式: 官网下载清华大学开源镜像软件 将下载的Anaconda包保存在Linux系统中。 安装A…

Winter ‘24发布在即,Salesforce Flow中的最热功能不容错过!

Flow Builder作为自动化领域的新秀,它在功能方面已经远远超过Workflow Rules和Process Builder,随着Workflow Rules和Process Builder的退役,目前所有自动化都需要迁移到Flow。 Winter 24发布在即,Flow中的亮点功能不容错过&…

生成折线图【Python思路】

# 第一步:导包 from pyecharts.charts import Line# 第二步:得到折线图对象 line Line()# 第三步:打开数据文件 (数据为JSON格式) f open("D:/text.txt","r",encodingUTF-8) data f.read()# 第四步:根据需…

Linux最小系统实现

最小系统介绍 什么是最小系统?怎么实现? 使用printf实现打印hello world 有没有更简单的实现? (1) 不使用外部任何库,头文件 (2) 单个文件 (3) 最简单的代…

如何更高效的写出更健全的代码,一篇文章教会你如何拥有一个良好的代码风格

前言:在平常的写代码的过程中,或多或少的遇到很多奇怪的 bug ,尤其是一些大的程序,明明上一部分都是好好的,写下一块的时候突然多几百个 bug 的情况,然后这一块写完了后编译的时候直接傻眼了,看…

netdata监控服务器主机(包括Docker容器)

效果 Docker部署 创建挂载目录 mkdir -p /data/netdata/{netdatacache,netdatalib}docker运行 docker run -d --namenetdata \-p 19999:19999 \-v /data/netdata/netdatalib:/var/lib/netdata \-v /data/netdata/netdatacache:/var/cache/netdata \-v /etc/passwd:/host/etc…

自然语言处理学习笔记(七)————字典树效率改进

目录 1. 首字散列其余二分的字典树 2.双数组字典树 3.AC自动机(多模式匹配) (1)goto表 (2)output表 (3)fail表 4.基于双数组字典树的AC自动机 字典树的数据结构在以上的切分算法中已经很快了&#x…

探索未知世界:桌面端3D GIS引领地理信息新时代

近年来,桌面端的三维地理信息系统(3D GIS)在地理信息领域迎来了显著的发展,为我们带来了更深入、更丰富的地理空间认知和数据分析体验。从城市规划到环境保护,从资源管理到应急响应,桌面端的3D GIS正逐渐成…

ICC2 update tech file / update ndm

拾陆楼知识星球入口 update tech file read_tech_file new_tf save_lib update ndm set_ref_libs -ref_libs $new_ref_list -library xx.lib save_lib rebind_block

四信5G工业路由器赋能5G LAN全连接工厂建设

5G作为“新基建”之首,肩负着驱动国民经济转型升级、促进实体经济与数字经济深度融合、满足各行各业高质量通信服务需求的重任。 随着5G技术的更新迭代,各行各业对网络的可靠性,确定性等提出更高的需求,5G LAN作为3GPP R16标准定…

视频监控/视频集中存储/云存储平台AI智能分析网关V3——功能简介

安防监控/视频集中存储/云存储平台AI智能分析网关V3内置了20多种AI算法,可针对安全生产、通用园区、智慧食安、石油化工等场景,提供基于视频智能检测技术的个性化行业解决方案。今天来具体介绍下v3版本的智能分析网关有哪些算法功能配置。 一、硬件 安防…