热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java异常处理语法及常见错误的解决方法

一、背景介绍java程序在运行过程中发生错误或异常情况是不可避免的,如果每次错误都由程序员手动控制和处理,其工作量极大,对于程序员来说&#

一、背景介绍

java 程序在运行过程中发生错误或异常情况是不可避免的,如果每次错误都由程序员手动控制和处理,其工作量极大,对于程序员来说,如果将过多的精力放在异常的处理上,程序员就可以不用再做其他事情了。

Java语言定义了很多异常类,将运行错误和异常的信息和处理方法封装在了异常类中,帮助程序员检查和控制异常,这样程序员就可以将时间和精力放在业务逻辑的实现上,而这套机制就是java的异常处理机制。

二、异常分类2ced565d43c66eec10c589524fc4c9e8.png

Java语言按照错误严重性,从throwale根类衍生出Error和Exception两大派系

Error(错误)a739ef1ba60c42f0cacc586144e75f71.png

Exception(异常)a739ef1ba60c42f0cacc586144e75f71.png

编译时异常:a739ef1ba60c42f0cacc586144e75f71.png

运行时异常:a739ef1ba60c42f0cacc586144e75f71.png

所以,java语言处理运行时错误有三种方式,一是程序不能处理的错误,

二是程序应该避免而可以不去捕获的运行时异常,

三是必须捕获的非运行时异常。8b22ab26ef493287a87a82da4f4b89c6.png

三、java异常处理机制

java默认处理机制:

1 抛出异常

2终止程序

异常处理程序机制:

1抛出异常

2try-catch-finally 捕获和处理异常

关键字

语法 try-catch

语法 finally

a523adce009417286c0349f2fb00a754.png

(***):不管是否有异常都会执行,即使使用return强制结束也会执行,唯一不执行情况System.exit(status);a523adce009417286c0349f2fb00a754.png

a523adce009417286c0349f2fb00a754.png

(***):排列catch 语句的顺序:先子类后父类,发生异常时按顺序逐个匹配,只执行第一个与异常类型匹配的catch语句a523adce009417286c0349f2fb00a754.png

语法 throws

语法 throw

四、如何优雅的设计异常

如何选择异常a739ef1ba60c42f0cacc586144e75f71.png

应该抛出怎样的异常a739ef1ba60c42f0cacc586144e75f71.png

ok,看了以上代码以后,你也许心中有一些想法,原来受检异常可以控制义务逻辑,对,没错,通过受检异常真的可以控制业务逻辑,但是切记不要这样使用,我们应该合理的抛出异常,因为程序本身才是流程,异常的作用仅仅是当你进行不下去的时候找到的一个借口而已,它并不能当成控制程序流程的入口或出口,如果这样使用的话,是在将异常的作用扩大化,这样将会导致代码复杂程度的增加,耦合性会提高,代码可读性降低等问题。那么就一定不要使用这样的异常吗?其实也不是,在真的有这样的需求的时候,我们可以这样使用,只是切记,不要把它真的当成控制流程的工具或手段。那么究竟什么时候才要抛出这样的异常呢?要考虑,如果调用者调用出错后,一定要让调用者对此错误进行处理才可以,满足这样的要求时,我们才会考虑使用受检异常。

应该选用哪种异常a739ef1ba60c42f0cacc586144e75f71.png

通过以上的描述和举例,可以总结出一个结论,RuntimeException异常和受检异常之间的区别就是:是否强制要求调用者必须处理此异常,如果强制要求调用者必须进行处理,那么就使用受检异常,否则就选择非受检异常(RuntimeException)。一般来讲,如果没有特殊的要求,我们建议使用RuntimeException异常



推荐阅读
author-avatar
手浪用户2602890531
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有