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 你觉得 ...
随机推荐
- 大部分人都会忽略的Python易错点总结
python中复数实现(-2) 0.5和开根号sqrt(-2)的区别** (-2)**0.5和sqrt(-2)是不同的,前者是复数后者是会报错的. print((-2)**0.5) #输出:(8.65 ...
- 三大框架知识点比较(Angular, Vue, React)
点击左键 => 拖拽图片 => 新标签页查看图片 => 放大拖拽查阅
- Linux学习入门-------------------------VMvare与镜像的安装与配置
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_39038465/article/d ...
- Windows 10 神州网信版
一.版本介绍:官网链接:http://document.cmgos.com/release_notes/release_notes_V0_H 下载链接:请自行百度Windows 10 神州网信政府版( ...
- mybatis基础 笔记
Mybatis依赖<!--测试--> <dependency> <groupId>junit</groupId> <artif ...
- Cocos2d-x3.0网络通信学习(一)
配置:win7+Cocos2d-x.3.0+VS2012 摘要:建立基本的http通信并得到返回信息. 一.添加项目与编译库 1.添加头文件 在需要用到Http网络相关类的文件中加入头文件 #incl ...
- Unity《ATD》塔防RPG类3D游戏架构设计(一)
目录 <ATD> 游戏简介 <ATD> 整体结构 <ATD> 游戏机制 Buff机制 Skill机制(技能机制) 仇恨机制 <ATD> 游戏模型 策划案 ...
- 菜鸟刷面试题(一、Java基础篇)
目录: JDK 和 JRE 有什么区别? == 和 equals 的区别是什么? 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? final 在 java 中有什 ...
- 【STM32-V7】STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2019-12-12)
说明: 争取做更多的实战性应用,分享更多的嵌入式技术,希望能在实际项目中帮到大家. (1)V7将大力加强对初学者的支持力度,已经更新至63章,下载链接,后37章和一批视频教程将加紧制作. (2)事隔五 ...
- python __getattr__和 __getattribute__
__getattr__ 这个魔法函数会在类中查找不到属性时调用 class User: def __init__(self): self.info = 1 def __getattr__(self, ...