首页 > 其他分享 >常用的异常处理情况

常用的异常处理情况

时间:2023-10-20 21:00:16浏览次数:38  
标签:常用 处理 抛出 捕获 try catch 异常

经过我这几天对异常处理的资料的搜集,我发现理解和处理异常对于任何一个Java开发人员来说都是至关重要的。因为在Java项目中,异常处理是确保程序的稳定性和可靠性的关键一步。这篇报告,我总结了一下在Java项目中常见的异常情况以及它们的处理方法。从他们的基本概念开始,然后深入一些常见的异常类型,并提供处理这些异常的最佳实践和策略

异常处理基础-什么是异常?

在Java中,异常是指运行时产生的不正常情况。当程序出现错误或者意外情况时,Java虚拟机(JVM)会抛出异常。异常可以是预期的或者非预期的,而有效的异常处理是确保程序在出现问题时可以恢复正常工作的关键因素之一。

检查异常

What:什么是检查异常(checked exception)?

        就是编译器要求你必须处置的异常。不知道你编程的时候有没有遇到过,你写的某段代码,编译器要求你必须要对这段代码try...catch,或者throws exception,如果你遇见过,没错,这就是检查异常,也就是说,你代码还没运行呢,编译器就会检查你的代码,会不会出现异常,要求你对可能出现的异常必须做出相应的处理。

        javac强制要求程序员为这样的异常做预备处理工作(使用try...catch...finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。如SQLException , IOException,ClassNotFoundException 等。

        比如:我们调用日期格式化类解析字符串的时候;

How:怎样处理检查异常(checked exception)?

        1、继续抛出,消极的方法,一直可以抛到java虚拟机来处理,就是通过throws Exception抛出。

        2、用try...catch捕获

        注意,对于检查的异常必须处理,或者必须捕获或者必须抛出

Where:检查异常有哪些呢?

        除了RuntimeException与其子类,以及错误(Error),其他的都是检查异常(绝对的大家族)。

非检查异常

What:什么是非检查异常(unchecked exceptions)?

        编译器不要求强制处置的异常,虽然你有可能出现错误,但是编译器不会在编译的时候检查,没必要,也不可能。

        javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。所以如果愿意,我们可以编写代码处理(使用try...catch...finally)这样的异常,也可以不处理。

        对于这些异常,我们应该修正代码,而不是去通过异常处理器处理。这样的异常发生的原因多半是代码写的有问题。如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。

异常处理机制

Java提供了异常处理机制来处理程序运行中可能出现的异常情况。该机制包括使用try、catch、finally和throw等关键字。其中,try块用于包含可能引发异常的代码,catch块用于捕获并处理特定类型的异常,finally块用于执行清理操作,而throw关键字用于手动抛出异常。

常见的异常类型及处理方法

1. NullPointerException

问题描述:当应用程序试图使用空对象引用时抛出此异常。

处理方法:在使用对象之前始终进行空指针检查,并且可以通过条件语句和断言来防止其发生。

2. ArrayIndexOutOfBoundsException

问题描述:当访问数组中不存在的索引时抛出此异常。

处理方法:在访问数组元素之前,始终检查索引的有效性,并确保数组边界检查是正确的。

3. ClassNotFoundException

问题描述:当尝试加载类时找不到该类时抛出此异常。

处理方法:确保所需的类在类路径中可用,并且可以使用try-catch块来捕获并处理此异常。

4. IOException

问题描述:在输入输出操作发生错误时抛出此异常。

处理方法:在进行输入输出操作时,始终使用try-catch块来捕获可能抛出的IOException,并在必要时执行适当的错误处理和资源释放。

5. SQLException

问题描述:在操作数据库时出现错误时抛出此异常。

处理方法:使用适当的数据库操作方法和技术来处理数据库操作,并使用try-catch块来捕获可能的SQLException,并进行恰当的日志记录和错误处理。

6. RuntimeException

问题描述:它是所有运行时异常的超类,通常由程序错误引起。

处理方法:尽可能避免抛出RuntimeException,同时确保对可能抛出的RuntimeException进行适当的捕获和处理。

异常处理最佳实践和策略

避免捕获过宽的异常:尽可能只捕获需要处理的特定异常类型,以避免掩盖潜在的问题。

日志记录和错误处理:在捕获异常时,始终记录异常信息,以便进行适当的故障排除和调试。

适当的异常抛出:在自定义异常时,尽可能提供有意义的异常消息,并确保异常链能够追踪回根本原因。

清理资源:在finally块中释放资源,以确保资源的正确管理和避免资源泄露。

设计和实施有效的异常处理策略

定义明确的异常类:根据业务需求和应用程序特点,设计自定义的异常类,以便在抛出异常时能够提供更多的上下文信息。

统一的异常处理:为整个应用程序实施统一的异常处理机制,这样可以确保在所有层次上都有一致的异常处理行为。

异常处理文档化:对于重要的异常处理过程和策略,编写文档以便未来维护和改进,并使团队成员能够了解和遵循这些最佳实践。

测试异常场景:编写单元测试和集成测试,模拟各种异常场景,以确保异常处理机制能够正确地工作并且应用程序能够适当地处理异常情况。

综上所述,异常处理在Java项目中至关重要。通过遵循最佳实践和策略,可以确保应用程序具有良好的健壮性和可靠性。合理的异常处理不仅可以提高应用程序的稳定性,还可以帮助开发人员更轻松地诊断和解决潜在的问题,提高开发效率。因此对异常处理方面的学习是java程序员的必要的学习,

标签:常用,处理,抛出,捕获,try,catch,异常
From: https://www.cnblogs.com/xuechenhao173/p/17777989.html

相关文章

  • 关于tomcat容器抛出的异常解决方案之一
    1,描述问题类型:调试信息泄露如:现要求:前端页面不显示调试信息。解决方案:替换默认的tomcat<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><e......
  • 性能测试中数据处理经验分享
    在性能测试中,有一个无法避免的问题,就是如何处理性能测试用例使用到的数据,其中包括前置数据、运行时数据和后置脏数据清理。相信大家在做性能测试中也会遇到跟我相同的问题,我分享一下自己的思路和解决方案,仅供参考。仅仅根据个人经验,我将性能测试中数据处理分成以下几种类型。静态......
  • Linux-管道、环境变量、常用命令
    目录管道概念要点与文件重定向的区别环境变量概念查看常用命令查看系统状况权限文件查找用户相关工具管道概念管道的作用类似于文件重定向,可以将前一个命令的stout做为下一个命令的stdin要点管道命令进处理stdout,会忽略stderr管道右边的命令必须能接受stdin多个管道命令可......
  • 【玩转 Node 连载 1/6】我是如何在 Node.js 中定位异常的
    第72届早早聊大会将于2023年10月29日(下周日)举办-前端跨端方案|跨端同构,方法框架,5位讲师下午直播,关键词:跨端框架/跨端组件库/小程序/Harmony/Electron。跟早早聊一起,码上多平台,上车链接:https://www.zaozao.run/conf/c72本文是2023年4月8日,第六十二届-前端早早......
  • QPQ表面处理,中国工程物理研究院到公司交流考察
    成都工具研究所有限公司的前身是成都工具研究所,于1956年创建于北京,是原机械工业部的直属研究所,是我国机械工业的综合性工具科研机构。公司官网:http://www.ctri.com.cn/公司主要从事精密切削工具、精密测量仪器以及表面改性处理技术的技术研究、产品开发和应用服务。7月2日上午,中......
  • Java拾贝第七天——异常
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么在程序实际运行过程中,可能存在大量的未知问题,所以在程序中对错误的处理是极其重要的。Java提供的异常处理机制可以更好地解决这方面的问题。认识异常publicstaticvoidmain(String[]args){System.out.prin......
  • 2D物理引擎 Box2D for javascript Games 第五章 碰撞处理
    2D物理引擎Box2DforjavascriptGames第五章碰撞处理碰撞处理考虑到Box2D世界和在世界中移动的刚体之间迟早会发生碰撞。而物理游戏的大多数功能则依赖于碰撞。在愤怒的小鸟中,小鸟摧毁小猪的城堡时,便是依赖碰撞而实现的;在图腾破坏者中,当神像坠落到图腾上或摔碎在地面上......
  • TC10 异常退出无法正常使用一例分析
    1.主要现象,客户TC系统正常使用,近期未做bmide和itk代码部署更新,突然频繁出现“tcserver.exe异常崩溃”造成TC无法使用。2.尝试解决的处理2.1登录系统,使用dba账户进行可能异常的操作,发现异常无法准确复现,各种操作都可能会出现:查询、创建、展开BOM、搜索引用等。 2.2登录查看日......
  • python异常处理else和finally的区别
    Python3错误和异常|菜鸟教程(runoob.com)try/except...elsetry/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的except子句之后。else子句将在try子句没有发生任何异常的时候执行。以下实例在try语句中判断文件是否可以打开,如果打开文......
  • CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属
    CSS3是用于为HTML文档添加样式和布局的最新版本的层叠样式表(CascadingStyleSheets)。下面是一些常用的CSS3属性及其详细解释:border-radius:设置元素的边框圆角的半径。可以使用四个值设置四个不同的圆角半径,也可以只使用一个值来设置统一的圆角。box-shadow:创建一个元素的阴影效果......