Java异常机制关键字总结,及throws 和 throw 的区别
在Java的异常机制中,时常出现五个关键字:try , catch , throw , throws , finally。
下面将总结各个关键字的用法,以及throw和throws的区别:
(1) try : 该语句需要用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个Exception。Java 要求try语句后面至少需要有一个catch或者finally 块。
在Java 7 中,Java开发人员对try语句进行了增强,使它可以支持对资源的自动回收管理,保证资源总是被正确的释放。具体使用会在后续的博文中分析。
(2) catch : catch语句的参数类似于方法的声明,包括一个Exception类型和一个Exception对象。Exception类型必须为Throwable类的子类,它指明了catch语句所处理的Exception类型;Exception对象则由运行时系统在try所指定的代码块中生成并被捕获,大括号中包含对象的处理,其中可以调用对象的方法。例如:
try{
//此处将抛出一个异常
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("file.bin"));
Object o = ois.readObject();
}
//catch 块对上面抛出异常的处理。
catch(IOException ioe){
ioe.printStackTrace();
}
注意:① catch语句可以有多个,分别处理不同类的Exception。Java运行时系统从上到下分别对每个catch语句处理的Exception类型进行检测,直到找到类型相匹配的catch语句为止。
② 类型匹配指catch到的Exception类型与抛出的Exception对象的类型一致或者是它的父类,因此,catch语句的排列顺序应该是从特殊到一般,否则编译器将会报错。例如:
try{
//此处将抛出一个异常
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("file.bin"));
Object o = ois.readObject();
}
//在这里IOException是Exception 的子类,所以这里没有报错。
catch(IOException ioe){
ioe.printStackTrace();
}
//假如把这个catch块放到上一个catch块前,将会报错。
catch(Exception ex){
ex.printStackTrace();
}
③ 用一个catch语句处理多个例外类型,这时它的例外类型参数应该是这多个例外类型的父类,程序设计中要根据具体的情况来选择catch语句的例外处理类型。
④ 虽然try块后面可以有多个catch块,但是最终只有一个catch块会被执行,绝不可能有多个catch块被执行。
(3) throw and throws : 这两个语句对初学者来说(特别是使用IDE的初学者)来说,很容易混淆。两者区别如下:
throw:总是出现在函数体中,指程序运行中抛出的一个具体的异常Exception,抛出的Exception需要用户来捕获处理。
throws:总是出现在一个函数头中,用来声明一个方法可能抛出的所有异常信息。通常不用显示地捕获异常,系统将自动将异常抛给上级方法。
简单来说:通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
(4) finally : finally块代表总是会执行的代码块。无论try所指定的程序块中抛不抛出 Exception,也无论catch语句的是否有匹配try块抛出的异常类型,finally所指定的代码都要被执行,它提供了统一的出口。因此通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。当然,在遇到某些情况下,finally块就不会运行。具体请查看我的另一篇博文。
Java异常机制关键字总结,及throws 和 throw 的区别的更多相关文章
- Java -- 异常的捕获及处理 -- throws与throw关键字
7.2 throws 与 throw关键字 7.2.1 throws 关键字 在定义一个方法时可以使用throws关键字声明,使用throws声明的方法标识此方法不处理异常,而交给方法的调用处进行处理 ...
- 全面理解java异常机制
在理想状态下,程序会按照我们预想的步骤一步一步的执行,但是即使你是大V,你也不可避免出错,所以java为我们提供了异常机制.本文将会从以下几个方面介绍java中的异常机制: 异常机制的层次结构 异常的 ...
- Java 异常机制
Java 异常机制 什么是异常 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程 为什么要有异常 什么出错了 哪里出错了 ...
- Java异常机制简介
什么是异常? 异常一般是指程序在编译期没有问题,但是在程序运行期出现的错误,一个程序会因为出现异常而终止运行,也就是我们常说的挂掉,在多线程下,异常只会影响所在的线程,对其他线程没有影响. Java异 ...
- 【55】java异常机制剖析
一.为什么要使用异常 首先我们可以明确一点就是异常的处理机制可以确保我们程序的健壮性,提高系统可用率.虽然我们不是特别喜欢看到它,但是我们不能不承认它的地位,作用.有异常就说明程序存在问题,有助于我们 ...
- [Java学习笔记] Java异常机制(也许是全网最独特视角)
Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...
- Java异常机制及异常处理建议
1.Java异常机制 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通过API中Throwable类的众多子类 ...
- JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)
1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...
- day08(异常处理,创建异常,finally,throws和throw的区别)
异常处理, 异常的产生 运行时异常:程序运行中产生的异常:RuntimeException类. 编译时异常:程序在编译时产生的异常:除了RuntimeException类 其他都是编译时产生的 ...
随机推荐
- Linux 基础教程 37-进程命令
pidof 我们知道每个小孩一出生就会一个全国唯一的编号来对其进行标识,用于以后上学,办社保等,就是我们的身份证号.那么在Linux系统中,用来管理运行程序的标识叫做PID,就是大家熟知的进程 ...
- (博弈 sg入门)kiki's game -- hdu -- 2147
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2147 题意: 在一个n*m的棋盘上,从 (1,m),即右上角开始向左下角走. 下棋者只能往左边(lef ...
- (字符串 键盘转换)Convert QWERTY to Dvorak -- zoj -- 5526
链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5526 Time Limit: 2 Seconds Memor ...
- Window vista 以上制作自定义证书并为端口配置ssl
此处的关键在于证书需要分两步,不然在配置ssl时总会有错误.也许makecert命令也会有些玄机,但是管他呢,请按以下步骤和命令配置,几分钟就可成功: 证书制作: 1, 在开始/所有程序(或其他地方 ...
- 自我介绍+github注册
我是网络工程141的蒋易,学号是1413042018 个人兴趣:打篮球,打羽毛球,打游戏 github注册流程 id:Scorpio1 注册困难:1.刚开始网页没打开. 2.全英文的界面无法看懂,要查 ...
- 开源WebGIS实施方案(三):Shapefile数据导入到PostGIS
PostGIS新版中提供了一个可视化的工具,用于Shapefile数据的导入和导出,极大的方便了使用者的操作. 创建空间数据库 以具有创建用户权限的账号登录pgAdminIII,连接到数据库 创建一个 ...
- 生成Webservice的两种方式(Axis2,CXf2.x)
一天之中,用了各种方式生成webservice,就是为了node.js能和程序顺利通信.最终还是用axis2成功了.工作基本完成了,现在可以总结一下. 关于生成方式,推荐使用eclipse,比较方便, ...
- Spring学习(五)——集成MyBatis
本篇我们将在上一篇http://www.cnblogs.com/wenjingu/p/3829209.html的Demo程序的基础上将 MyBatis 代码无缝地整合到 Spring 中. 数据库仍然 ...
- Navicat 连接阿里云RDS
背景: Navicat 是一个非常优秀与易用的数据库可视化管理软件,相信很多人都用过.这次服务器升级,数据库用了阿里云的RDS,阿里云自带的数据库管理面板功能有限,用不习惯.所以还是想着用 Navic ...
- 基于 Raphael 的 Web UI 设计 - 初稿
基于 Raphael 的 UI 设计 - 初稿 还有很多地方需要完善,这次要把 Raphael 彻底用起来,^_^, 一定要150字哦,一图抵千字啊,^_^,不喜欢写字的,那么怎么凑够150字呢,说说 ...