Java Exception

java restful 后端 Exception 的处理架构总结 本文主要结合实现的restfuljava 后端,总结Exception 的处理架构。 1.    exception 的分类和处理方法 异常是面向对象语言非常重要的一个特性,良好的异常设计对程序的可扩展性、可维护性、健壮性都起到至关重要。 JAVA根据用处的不同,定义两类异常     Checked Exception: Exception的子类,方法签名上需要显示的声明throws,编译 阅读详情

异常处理

安全检查及错误处理

编程中的对于带参方法进行方法传参时,必须对所传参数进行安全检查,不能假定使用者一定会传入正确的值。但如果检查到传入参数不合法时,由方法去终止程序的运行显然是一个问题。不应该让方法来终止程序——应该由方法的调用者来决定是否终止程序。

当进行安全检查时,若传入参数不合法,而如上述由方法去终止程序又显然是不合理的,此时就可以由方法去抛出一个异常,(throw)

当异常被抛出时,正常的执行流程就会被中断,而异常则会被从方法处转移到其调用者处,由调用者决定如何处理异常

进行异常处理的好处

  • 它能够使方法抛出一个异常,并由调用者决定如何处理该异常
  • 异常处理的根本优势就是将检查错误(由被调用者处)从处理错误(由调用者方法完成)中分离出来

异常的体系结构

Throwable 
    |-- Error 
         |-- OutOfMemoryError 内存溢出 
         |-- VirtualMatchineError 虚拟机崩溃
         |-- ... 
    |-- Exception 
         |-- ClassNotFoundException 试图使用一个不存在的类 
         |-- IOExceprtion IO异常 
         |-- RuntionException 运行时异常 
               |-- NotNullPointException 空指针异常 
               |-- IndexOutOfBoundsExcepton 数组下标越界 
               |-- ArithmeticException 一个整数除以0 
               |-- IllegalArgumentException 传入方法参数不合法 
         |-- ...

Throwable类是所有异常类的根类,所有异常类都直接或间接的继承自Throwable类。

异常的分类

异常可以分为三种类型:系统错误(Error)、编译时异常(Exception)、运行时异常(RuntimeException)

系统错误(Error)

该异常是由java虚拟机抛出的,描述了系统内部错误,很少发生,发生时除了终止程序,什么都做不了

OutOfMemoryError : 内存溢出
VirtualMatchineError 虚拟机崩溃
...
编译时异常(Exception)

该异常描述了程序或外部环境所引起的错误,这些错误可以被捕获和处理.

在IDE中进行编码时,如果出现编译异常,那么IDE会出现错误提示。

ClassNotFountException
IOException
...
运行时异常(RuntimeException)

描述了程序设计的错误,运行时异常通常是由java虚拟机抛出的。

在IDE中进行编码时,若出现运行时异常IDE不会有任何提示,因为运行时异常通常表现为程序的逻辑错误。

编译器不要求对抛出的运行时异常进行处理,也就是说既不捕获也不声明抛出

ArithmeticException  一个整数除以0 
NullPointException 
IndexOutOfBoundsException 
IllegalArgumentException  传递给方法的参数不合法,或者不合适
...
注意
免检异常(Unchecked Exception):

Error、RuntimeException以及它们的子类都称之为免检异常(Unchecked Exception):通常反映了程序设计上不可恢复的逻辑错误,不要求在方法中显示声明Error和RuntionException

必检异常(Checked Exception):

所有的其他异常都称为必检异常(Checked Exception):意思是说编译器会强制要求程序员检查并通过try-catch处理或者在方法头声明(throws) 每个方法都必须声明它可能抛出的必检异常

异常的三种处理方式

异常处理的三种操作:声明一个异常(throws)、抛出一个异常(throw)、捕获一个异常(try-catch-finally)

声明一个异常(throws)

对于方法抛出的异常,可以采用在当前方法头中声明一个异常的方式进行处理

public void test(...) throws Exception {
    ...
}

注意:在继承过程中,如果父类定义的方法有抛出异常,
那么子类在继承父类方法时,可以不抛出异常,
或者抛出和父类相同或者更小的异常

抛出一个异常(throw)

在编码时,对将可能发生的错误可以采用抛出异常的方法进行处理,以便当异常发生时方法的调用者进行处理,其格式如下:

throw new Exception(...);
自定义异常

当系统类库中提供的异常类不能满足需要时,我们需要自定义异常类

自定义异常需要继承自系统的编译时异常或者运行时异常,若要输出相应 的异常信息,可以自定义构造器方法并调用super()

在IDE中编码时,可以通过IDE自动编写并重载构造器

捕获一个异常 (try-cathc-finally)

处理异常的代码称为异常处理器,可以从当前方法开始,
沿着方法调用链, 按照异常的反向传播方向找到该处理器

一个通用的父类可以派生出各种子类。如果一个catch块可以捕获一个父类异常,
那么它就能够捕获 那个父类的所有子类的异常对象,因此在catch块中异常被指定的顺序时非常重要的,如果父类的catch块出现在子类的catch块之前 就会发生编译错误

在JDK7 后对于使用同样的处理代码处理多个异常的情况,可以使用新的多捕获
特征 (multi-catch feature) 简化异常的代码编写。语法是:

catch (Exception1 | Exception2 | Exception3 | ... e) { ... }

注意:该语法下,catch中的Exception之间不能存在继承关系

try/catch/finally的使用
  • try: 在try代码块中编写可能会发生异常的代码
  • catch: 在catch代码块中捕获try可能会发生的异常以及在该异常发生后需要进行的处理操作
  • finally: 有些特定的代码无论异常是否发生都需要执行,finally用于执行这一类代码,以避免当程序发生时异常进行跳转时,这一部分代码无法执行的情况。如释放一些资源等
  • try不能单独使用,必须和catch或者finally结合才能使用,也就是说catch和finally都不是必须的,但至少出现一个

注意:finally块中一般不谢return,try-catch中一旦执行return,那么做两件事:1. 将返回值存入JVM缓冲区中 2. 如果有finally, 则现将finally执行完,然后结束方法,返回缓冲区中的值

捕获异常的注意点:
  1. 如果可能捕获的异常之间存在继承关系,那么子类应该写在前边
  2. catch()中可以捕获多个异常, 但多个异常之间不能有继承关系
    try{}catch(异常名1 | 异常名2 e){}
  3. try/catch/finally结构中try不能单独存在。可以分别符catch或finally结合,或者三者都存在
Java8 Exception异常详解 Preface 这节就是介绍Exception,介绍Exception的机制,种类,捕获等概念 1.产生与捕获异常的过程 图示 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F5TZ6ZRJ-1602159352564)(E:\typora\image\image-20200826174659105.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OtJpZgtW-1602159352580)(E:\typora\image\ 阅读详情

相关推荐

Java 中 Exception 和 Error 有什么区别?

![[Throwable.png]] 和 都是 类的子类(在 Java 代码中只有继承了 Throwable 类的实例才可以被 throw 或者被 catch)它们表示在程序运行时发生的异常或错误情况。总结来看: 表示可以被处理的程序异常, 表示系统级的不可恢复错误。详细说明:1)Exception:是程序中可以处理的异常情况,表示程序逻辑或外部环境中的问题,可以通过代码进行恢复或处理。常见子类有:、、、 等。 又分为 Checked Exception(编译期异常)和 Unchecked Except

2302_81141145的博客 1160

解决apache mina java.io.IOException: Connection timed out问题

这种连接超时问题也有很多原因,我也在百度上找到过很多解决办法,但并不能解决我的问题,所以解决办法视情况而定。 我出现这种问题的原因是服务器接受数据到响应的过程中mina自动close掉了session,因此执行后面的程序会报连接超时错误。 public class MinaSocketTextLogger extends IoFilterAdapter { public fina

shuaixianxian的专栏 6428

java Exception分类

那么何为Checked Exception, 何为Unchecked Exception。 所示 正如上图中所示: Checked Exception: 指的是不能恢复,必须要被使用者来处理的一类异常,如果不捕获,那么编译会报错。例如,IOException。 Unchecked Exception: 指的是在运行时才会导致程序奔溃的异常,编译时候并不会报错。例如,Runtime Ex...

Top5软件工程硕士,先后在京东、字节从事多年Java后端开发、实时和离线大数据开发 1352

java.io.IOException: Connection reset by peer和java.io.IOException: Connection ti

原文地址:http://zhidao.baidu.com/link?url=Dk1-LuZFMUK7o6BXCkQ89RSASJYAoTvnHK1KAD9sr9ZGHQg8dX0NXzyyGlRP7uO0DRJNONoouMRBDBIxYy1sga 总报这两个错误。 java.io.IOException: Connection reset by peer at ...

dalaoshu321的博客 856

光伏发电系统模拟及其发电预测开源python工具pvlib

本文介绍光伏发电系统模拟及其发电预测开源python工具pvlib,以及举例介绍获取辐照度方法、光伏发电预测思路。

肖永威的专栏 1万+

中国1990-2021连续30年土地利用CLCD数据分享

CLCD(China Land Cover Dataset)数据集是由武汉大学黄昕老师基于Google Earth Engine上的335,709景Landsat数据制作的中国年度土地覆盖数据集。为了提高CLCD的时空一致性,还提出了一种包含时空滤波和逻辑推理的后处理方法。该数据集最大的优势在于每年30米的土地利用分类结果,且连续覆盖了30年时间。相比其他产品如GLC_FCS30、Global30、AGLC2000_2015、FROM-GLC10、ESA10、ESRI10等,CLCD在时间分辨率上更高。

qq_48539301的博客 1万+

解决:org.apache.catalina.connector.ClientAbortException: java.io.IOException: 断开的管道

对“org.apache.catalina.connector.ClientAbortException: java.io.IOException: 断开的管道”异常的分析和处理

拾年一剑 的专栏 2万+

强化学习实战:如何用PPO算法训练一个超级马里奥AI(附完整代码)

本文提供了一份详细的强化学习实战指南,教你如何使用PPO算法训练一个能玩《超级马里奥》的AI智能体。内容涵盖从环境搭建、自定义奖励函数设计到PPO智能体的PyTorch完整实现,并附有可运行的代码,帮助开发者快速上手游戏AI开发。

h6j7k8l9p0的博客 947

java nio 连接超时,“ java.io.IOException:连接超时”与“和“ SocketTimeoutException:读取超时”;...

If I set a socket SoTimeout, and read from it. when read time exceed the timeout limit, I'll get an "SocketTimeoutException: Read timed out".and here is the stack in my case:java.net.SocketTimeoutExce...

weixin_30789921的博客 2687

AT32F403A ADC采集实战:如何用V2库精准读取可变电阻电压(附完整代码)

本文详细介绍了基于AT32F403A微控制器和V2库实现高精度ADC采集的工程化方法。内容涵盖从基础的单通道轮询配置到多通道扫描与DMA传输的进阶应用,并重点分享了提升ADC采集精度的关键技巧,包括采样时间优化、软件滤波算法以及硬件布局考量,提供了完整的实战代码,帮助开发者解决数据跳动、稳定性等常见问题。

weixin_29189003的博客 93

算法面试八股文『 基础知识篇 』

个人整理的算法面试基础知识八股文,内容较详细。

SG_teresa's blog 4339

Timeout超时类异常汇总

整理超时类异常(更新中)

southdreams的博客 865

【js逆向学习】新手视角破解「广东省公共资源交易平台」

学习js逆向,破解广东省公共资源交易平台,详细记录个人探索、踩坑全过程。网站地址: aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c=仅供学习参考,如有疑问欢迎交流,一起学习进步。

DCSDA的博客 3322

Java的throws Exception

转:https://www.cnblogs.com/feichengwulai/articles/3793261.html 1、(终极解释!!!)throwsException放在方法后边,是throwsException表示的是本方法不处理异常,交给被调用处处理(如果你不希望异常层层往上抛,你就要用throws Exception),而且被调用处必须处理。 2、throw new Exce...

hanxiaoyong_的博客 7万+

Frigate进阶玩法:如何用MQTT和Python脚本扩展你的自定义目标检测算法

本文详细介绍了如何通过MQTT和Python脚本扩展Frigate的自定义目标检测算法,无需修改源码即可实现特殊场景(如工业设备异常、农业病虫害识别)的高效检测。文章涵盖Frigate配置、外部检测服务构建、高级集成技巧及性能优化实践,帮助开发者灵活扩展智能监控能力。

weixin_42662293的博客 350

详解【计算机类&面试真题】军队文职考试——第7期:C盘格式化需要注意什么?| 两台笔记本连起来后ping不同,可能存在哪些问题?| 模拟信号到数字信号是如何转化的?| 计算机由哪些部件组成?

这是我分享的系列面试知识——军队文职(计算机类)面试真题详解(第7期)。本期分享:两台笔记本连起来后ping不同,你觉得可能存在哪些问题?模拟信号到数字信号是如何转化的?谈一谈计算机由哪些部件组成?如何加强计算机网络安全管理?若通过域名无法访问,而通过IP地址能访问。这是怎么回事?你将如何解决?谈一谈C盘格式化需要注意什么?开放类题目:如果应聘的岗位和你想的差距很远,你怎么办?

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 1923

java中Error与Exception的区别

当我们谈论编程中的错误(Error)和异常(Exception)时,通常会涉及到程序执行中可能出现的问题和如何处理这些问题的策略。本文将详细讨论这两者的区别和如何在代码中处理它们。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 7080

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java error和exception_java基础:Error和Exception

一、Error和Exception什么关系Error和Exception都继承自Throwable。继承关系如下图所示:其实Error和Exception就是java语言设计Throwable时的两个大的分类:Error一般是比较严重的问题,不应该被catch,比如出现了OutOfMemoryError,StackOverFlowError这些错误,程序员是无能为力的;而Exception是程序员...

weixin_32026659的博客 548

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java中Exception与Error的差异详解

在Java编程中,异常处理是确保程序健壮性和稳定性的重要机制。然而,很多初学者和部分开发者可能会对`Exception`和`Error`这两个概念产生混淆。本文将深入探讨`Exception`与`Error`的差异,通过代码示例帮助读者更好地理解它们的本质和使用场景。

2201_75353178的博客 1718

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

exception 类 java_关于Java中Exception类的一些方法

序:这篇文章我其实不知道取什么标题好,之前写了一篇文章,关于Android调试时打印的一些技巧,但是其中犯了个比较低级的错误(其实也不是说错误,就是代码中反而自己绕了远路),经一位朋友的及时指正,而问题也能够有更好的方法解决,该文章就没有再存在的必要。但是其中主要涉及的Exception的一些方法,应该还是有一定的作用,故而有此文。废话至此,切入正题。Java中的Exception异常类是我们程序...

weixin_32285045的博客 590

Java中Exception的处理

简述 用Java在开发系统的时候,Exception的处理往往是比较复杂的。如何处理开发中遇到的Exception,如何将合理的异常信息呈现给客户是开发人员必须要考虑的问题。 关于Exception的处理的文章在很多地方都可以看到,本文除了做一个总结之外,还将结合Design by Contract,JDK 1.4引入的assertion,以及如何用Spring的AOP处理Exception做进一

snakeqi的专栏 1887

JAVA中的Exception及Error

另外,当指定的路径名存在,但是由于某种原因无法访问时也会抛出此异常,例如当尝试以写的方式打开一个只读文件的时候。方法不需要在其throws子句中声明在方法执行过程中可能抛出但未捕获的Error的任何子类,因为这些错误是不应该发生的异常情况。可以通过JVM启动参数。3).ClassLoader类的loadClass方法的方式以类的String名称载入类,但无法找到对应名称的类的定义时抛出。拟机或类加载器实例尝试载入类的定义(作为正常方法调用的一部分或使用new创建对象的一部分),但却找不到其定义时抛出。

CuteFruit的博客 460

java收集Exception信息

public void methodB() { System.out.println("------进入methodB----------"); // init(); String str1 = null; String str2 = "123"; try{ if(str1.equals(str2

CodeHarvest的博客 707

Java 基础-Error和Exception

这里主要是介绍 Java 中的Error和Exception,它们的共同点和不同点。

汪了吧的博客 1379

Exception in Java

常见异常是throwable,exception,runtimeexception的子类,如果我们需要一个异常并不在规定子类中,则需要自定义一个异常。}}假如现在我们要自定义一个分数必须在0-100之间的异常。throw new ScoreException("分数不合法")}便可以在分数不合法时抛出exception。

weixin_48438939的博客 1351
上一篇: Java Variable
下一篇: Java 堆、栈和方法区
Tennysons
博客等级 码龄10年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值