Java的异常处理

Java的异常处理

一、异常的概述

在进行项目开发的过程中,即使开发者把代码写得足够完善,在系统运行的时候仍然会遇到一些问题,因为很多问题不是靠代码就能够避免的。比如:客户输入数据的格式,读取文件是否存在,网络是否通畅等。

异常: Java中,将程序执行中发生的不正常情况称为异常。开发过程中的语法错误和逻辑错误不是异常。

二、异常的体系结构

Java的异常事件可分为以下两类,它们的父类是Throwable:

  • Error:JVM无法解决的严重问题:像堆内存溢出(OOM),栈内存溢出(StackOverFlowError)
  • Exception:分为编译时异常(checked Exception)和受检时异常(unchecked Exception)

三、常见的异常

编译时异常:

  • IOException: FileNotFoundException
  • ClassNotFoundException

运行时异常:

  • NullPointerException
  • ArrayIndexOutOfBoundsException
  • ClassCastException
  • NumberFormatException
  • InputMismatchException
  • ArithmeticException

四、异常的处理机制

方式一:try-catch-finally

try{
	// 可能出现异常的代码
}catch(异常类型1 变量名1){
	// 处理异常的方式1
}catch(异常类型2 变量名2){
	// 处理异常的方式2
}....
finally{
	// 一定会执行的代码
}

使用try-catch-finally处理编译时异常,使得程序在编译时就不再报错,但是运行时仍可能报错。即将编译时会出现的错误推迟到运行时发生。

finally是可选的,finally中声名的是一定会被执行的代码。例如:catch中又出现了异常;try中有return语句;catch中有return语句等。都得执行finally中的语句。

像数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动回收的,需要我们自己手动的进行资源的释放,此时的资源释放,就需要声名在finally中。

try-catch-finally结构可以嵌套。

方式二:throws

throws + 异常类型,写在方法声名处,指明此方法执行时,可能会抛出的异常类型。一旦方法体执行,出现异常,就会在异常代码处生成一个异常类的对象,此对象满足throws后面的异常类型时,就会被抛出。异常代码后的代码不再执行。

throws只是将异常抛给了方法的调用者,并没有真的处理掉异常。

方法重写的规则:
子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。

问题:开发中如何选择使用try-catch-finally 还是 throws ?

  • 如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能用throws,意味着如果子类重写的方法有异常,必须使用try-catch-finally方式处理。
  • 执行的方法a中,先后又调用了另外的几个方法,这几个方法是递进关系执行的,我们建议这几个方法使用throws的方式进行处理,而执行的方法a可以考虑使用try-catch-finally的方式进行处理。

五、手动抛出异常

手动生成一个异常对象然后抛出。用 throw。
例如:throw new RunntimeException(“您输入的数据非法”)

六、用户自定义异常类

  1. 继承于现有的异常结构:RuntimeException 和 Exception
  2. 提供全局常量:serialVersionUID
  3. 提供重载的构造器

throw 是生成一个异常对象的方式,throws是处理异常的一种方式,这两者不是一回事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值