这一篇让你知道怎么处理异常

简介: 这一篇让你知道怎么处理异常

Java异常处理方式


image.png

Java 通过面向对象的方法进行异常处理,一旦方法抛出异常,系统自动根据该异常对象寻找合适异常处理器(Exception Handler)来处理该异常,把各种不同的异常进行分类,并提供了良好的接口。在 Java 中,每个异常都是一个对象,它是 Throwable 类或其子类的实例。


当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并可以对其进行处理。Java 的异常处理是通过 5 个关键词来实现的:try、 catch、throw、throws 和 finally。


在Java应用中,异常的处理机制分为声明异常,抛出异常和捕获异常。



throw和throws的区别:



  1. 位置不同:throw:方法内部throws: 方法的签名处,方法的声明处


  1. 内容不同:throw+异常对象(检查异常,运行时异常)throws+异常的类型(可以多个类型,用,拼接)


  1. 作用不同:throw:异常出现的源头,制造异常。throws:在方法的声明处,告诉方法的调用者,这个方中可能会出现我声明的这些异常。然后调用者对这个异常进行处理:要么自己处理要么再继续向外抛出异常



1.throws声明异常


通常,应该捕获那些知道如何处理的异常,将不知道如何处理的异常继续传递下 去。传递异常可以在方法签名处使用 throws 关键字声明可能会抛出的异常。注意 非检查异常(Error、RuntimeException 或它们的子类)不可使用 throws 关键字来声明要抛出的异常。 一个方法出现编译时异常,就需要 try-catch/ throws 处理,否则会导致编译错误



2.throw抛出异常



如果你觉得解决不了某些异常问题,且不需要调用者处理,那么你可以抛出异常。 throw关键字作用是在方法内部抛出一个Throwable类型的异常。任何Java代码都可以通过throw语句抛出异常。



3.trycatch捕获异常


程序通常在运行之前不报错,但是运行后可能会出现某些未知的错误,但是还不想直接抛出到上一级,那么就需要通过try…catch…的形式进行异常捕获,之后根据不同的异常情况来进行相应的处理。如何选择异常类型


可以根据下图来选择是捕获异常,声明异常还是抛出异常


image.png




自定义异常在生产中如何应用


Java虽然提供了丰富的异常处理类,但是在项目中还会经常使用自定义异常,其主要原因是Java提供的异常类在某些情况下还是不能满足实际需球。例如以下情况:


  1. 系统中有些错误是符合Java语法,但不符合业务逻辑。


  1. 在分层的软件结构中,通常是在表现层统一对系统其他层次的异常进行捕获处理。




相关文章
|
4天前
|
前端开发 程序员
项目中异常是如何处理的
项目中设定了全局异常处理器,统一处理预期和运行时异常。预期异常由程序员手动抛出,用于异常情况的接口返回;运行时异常为不可控错误,提供统一返回格式便于前端提示和后端排查。全局异常处理器借助@RestControllerAdvice和@ExceptionHandler注解,前者标识处理器,后者按异常类型定制前端响应,如预期异常直接返回,运行时异常则调整响应内容。
23 0
|
6月前
|
前端开发 rax Linux
【CSAPP】异常控制流 | 异常表 | 异常类别 | 同步异常 | 异步异常
【CSAPP】异常控制流 | 异常表 | 异常类别 | 同步异常 | 异步异常
69 0
|
4天前
|
C++
C++处理的异常的机制
C++处理的异常的机制
|
9月前
I2C误码了怎么处理
I2C误码了怎么处理
|
9月前
|
Java 数据库连接
异常处理一:抓抛模型
异常处理一:抓抛模型
49 0
|
9月前
|
数据采集 数据安全/隐私保护
如何使用异常处理机制捕获和处理请求失败的情况
在爬虫开发中,我们经常会遇到请求失败的情况,比如网络超时、连接错误、服务器拒绝等。这些情况会导致我们无法获取目标网页的内容,从而影响爬虫的效果和效率。为了解决这个问题,我们需要使用异常处理机制来捕获和处理请求失败的情况,从而提高爬虫的稳定性和稳定性。
如何使用异常处理机制捕获和处理请求失败的情况
|
JavaScript 小程序 Java
线程池中线程抛了异常,该如何处理?
线程池中线程抛了异常,该如何处理?
你真的明白关于迭代器的方法、使用异常、并发修改异常介绍嘛?
关于迭代器的方法、使用异常、并发修改异常介绍的使用
104 0
你真的明白关于迭代器的方法、使用异常、并发修改异常介绍嘛?
|
SQL druid Java
是谁的请求导致我的系统一直抛异常?
在线上环境中,请求错综复杂,如果有某个请求出现了不符合预期的情况,我们往往会先需要确定这个请求在实际环境中是由哪个 Controller 来处理的。通常情况下,我们需要去查阅文档或是代码,这个过程往往比较繁琐,并且不一定是准确的,可能由于一些问题会导致我们的请求没有被预期的 Controller 处理。而借助微服务洞察的能力,能够快速地定位特定的请求在真实环境中是由哪个 Controller 处理的。
是谁的请求导致我的系统一直抛异常?
|
JSON Java 程序员
写了这么久的业务连异常都不知道怎么处理吗
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
189 0