Java的异常处理方式
一、异常简介
异常结构图

Throwable是类,Exception和Error都继承了该类,error是因为系统内部错误或者资源耗尽错误,这种情况很少出现,而且error也不允许被抛出在Exception异常中又分为RuntimeException(运行时期异常)和IOException(其他异常),划分两个异常的规则是:由于程序错误导致的异常属于RuntimeException(运行时期异常),比如错误的类型转换,数组越界,访问null指针这类,而像I/O错误这类问题导致的异常属于其他异常;
在Java中,将error类和RuntimeException类的异常称为unchecked(非受查异常)所有的其他异常称为checked(受查异常);受查异常是必须要处理的异常,如果不处理,编译器就不让通过
非受查异常编译时期不会出问题,可以不去处理,虚拟机会处理这些问题,一般是在运行的时候出问题,这些异常一般都是因为数组越界,访问null指针这些问题
在抛出异常时可以抛出Throwable,并且在调用的时候必须进行catch处理。但是这样的设计方法做不好,因为不知道抛出的类型到底是哪种具体问题,无法针对性的处理
二、异常处理的两种方式
2.1 throw
一个方法不仅需要告诉编译器将要返回一个什么值,还要告诉编译器可能发生什么错误,方法应在其首部声明所以可能抛出的异常,这样可以从首部反映出这个方法可能抛出那些checked异常;
throws和throw的区别
- throws
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常 - throw
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常 - throws异常注意事项:
子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。
如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
如果父类没有抛出任何异常,那么子类也不可以抛出任何异常,如果子类方法内有异常发生,那么子类只能try,不能throws
在异常处理中,应该捕获那些知道怎么处理的异常,而将那些不知道怎样处理的异常抛出;
2.2 try...catch
try ....catch 的处理方案
每有一个异常就写一个try...catch..写一个try , 多个catch
try{
...
}
catch(异常类名 变量名) {
...
}
catch(异常类名 变量名) {
...
}
try...方式异常处理的方式:
在try里面发现问题后,jvm会帮我们生成一个异常对象,然后把这个异常对象和catch里面的异常进行匹配。如果该异常对象是某个异常类型,就会执行该catch里面的处理信息。在jdk7.0之后出现了一个新的异常处理方案
try{
...
}
catch(异常名1 | 异常名2 | ... 变量 ) {
...
}
这种处理方法的优点是使得代码简洁了,但是不足也很明显,这种方法对于不同的异常,处理方法是一致的,但是如果如果在开发中碰到的是同类型的异常,且有相同的处理方法,那么就可以使用这种异常处理方法,并且,这种特性只有在异常之间不存在子类关系才会使用,即异常1和异常2不能是父类和子类的关系。
finally子句 :
finally子句的处理机制:在执行了try-catch语句后,执行finally子语句,而且无论try部分有没有被执行,即使try-catch语句中执行了return语句,finally语句内的都将被执行,但是有一种情况是例外,如果在try-catch语句中执行了系统退出代码,即system.exit(0),那么finally将不会被执行,而且包括后面所有的语句。
三、自定义异常类
在程序中,有时候会碰到一些用标准类异常也无法描述和处理的问题,这个时候就可以自定义一个异常类,自定义异常类继承Exception,或者继承Exception的子类,自定义的异常类要给出具体的异常处理的操作,一般自定义的异常类有两个构造方法,一个是无参构造,一个是带有描述详细的异常信息的构造,下面是一个自定义的异常类,当出现了某些异常的时候就可以抛出自定义的异常类

Java的异常处理方式的更多相关文章
- Java IO异常处理方式
public class IOException{ // 获取系统默认的行分隔符 private static final String LINE_SEPARATOR = System.getProp ...
- JAVA异常及其异常处理方式
异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Syste ...
- Java的异常处理
Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally.JB的在线帮助中对这几个关键字是这样解释的: Throws: Lists the ...
- Java之异常处理机制
来源:深入理解java异常处理机制 2.Java异常 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 ...
- java的异常处理机制(try…catch…finally)
1 引子try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话.不信 ...
- Java中异常处理和设计
在程序设计中,进行异常处理是非常关键和重要的一部分.一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度.试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻 ...
- java的异常处理简介
异常概述 任何一种程序设计语言设计的程序在运行时都有可能出现错误,例如除数为0,数组下标越界,要读写的文件不存在等等. 捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生. 对于这些错误,一 ...
- 深入理解java的异常处理机制
JAVA异常的概念 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的 ...
- Java 六种异常处理的陋习(转)
Java 六种异常处理的陋习 原文链接: http://www.cnblogs.com/Android-and-android/archive/2013/05/02/3054469.html 你觉得 ...
随机推荐
- elasticSearch的部署和使用
部署服务 docker run启动elastic服务 docker pull elasticsearch:6.7.2 docker run -d -p 9200:9200 -p 9300:9300 - ...
- Toggle the WinForms Ribbon Interface 切换 WinForms 功能区界面
In this lesson, you will learn how to enable/disable the Ribbon User Interface in your application. ...
- 苹果_公司开发者账号_申请DUNS number
申请DUNS number 注意事项:a.公司英文名称,例如:北京京城科技有限公司,Beijing Jingcheng Technology Co., Ltd.(Co.和Ltd.都是缩写,中间用“逗号 ...
- 提速企业应用开发,Ntaub 3极速开发平台发布
企业管理系统搞了这么多年,还是以表单.数据增删改这些功能为主.唯一的变化就是“变化”,企业的业务模式和流程越来越多样化,开发需求变更越来越频繁,开发周期却要求越来越短. 无代码.低代码开发平台开始流行 ...
- Vue-cli脚手架 安装 并创建项目--命令
检查是否有 node - v 安装Vue-cli npm install -g vue-cli 安装好后,执行 vue list可以看到很多实用的模板,我这里实用的webpack 初始化模板 vue ...
- C#&.Net干货分享- 构造BaiduLanguageHelper对接百度的语言翻译
全部是封装的API源码... namespace Frame.Api{ /// <summary> /// 百度多语言支持器 /// </summary> ...
- WCF、WebAPI、WCFREST、WebService的区别
目录导航: 1. WCF 2. WebAPI 3. WebService 4. WCFREST 5. 如何选择WCF.WebAPI.WCFREST.WebService 1.WCF 这个是基于SOAP ...
- javabean的内省(Introspector)
内省是 Java 语言对 Bean 类属性.事件的一种缺省处理方法.例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值. 通过 getName/ ...
- Flink| 运行架构
1. Flink运行时组件 作业管理器(JobManager) 任务管理器(TaskManager) 资源管理器(ResourceManager) 分发器(Dispatcher) 2. 任务提交流程 ...
- 5种智能指针指向数组的方法| 5 methods for c++ shared_ptr point to an array
本文首发于个人博客https://kezunlin.me/post/b82753fc/,欢迎阅读最新内容! 5 methods for c++ shared_ptr point to an array ...