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类 其他都是编译时产生的 ...
随机推荐
- canvas基础API
1.路径绘图: 把“钢笔”移动到画布的某个位置上 ctx.moveTo(x,y) 把“钢笔”连线到画布的某个位置上 ctx.lineTo(x,y) 描边路径的api ctx.stroke() 填充路径 ...
- 解决linux下tomcat停止进程任存在问题
解决linux下tomcat停止进程任存在问题 在Linux下(之所以强调linux下,是因为在windows下正常),执行tomcat ./shutdown.sh 后,虽然tomcat服务不能正常访 ...
- POJ1679 The Unique MST 2017-04-15 23:34 29人阅读 评论(0) 收藏
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 29902 Accepted: 10697 ...
- 并发处理 - 配置文件"并发:报表访问层"的设置 (Doc ID 1625757.1)
文档内容 目标 解决方案 适用于: Oracle Concurrent Processing - 版本 12.0.0 到 12.2 [发行版 12 到 12.2] 本文档所含信息适用于所有平台 ...
- 咏南中间件增加WEBSOCKET支持
咏南中间件增加WEBSOCKET支持
- Android-GsonUtil-工具类
GsonUtil-工具类 是把Google提供的Gons进行了方法封装,提供了关于一些常用的Gons使用的公共方法: package common.library.utils; import andr ...
- Windows 以及 Xcode下编译调试 libcurl 源码
curl 这个工具大家都很熟悉. 前几天因为要跟踪curl的实现细节, 不得不设法搭建curl的调试工程. 我们分别在windows visual studio 和 mac 上的 xcode 下搭建调 ...
- 自定义Team Foundation Server (TFS) 与Project Professional的集成字段
用户可以象使用Office Excel一样,使用Project Professional连接TFS,将数据下载到本地修改,并且发布到TFS服务器上,如果你习惯使用Project来计划你的项目,那么Pr ...
- Rest-assured 写日志到 log4j
背景: 采用Rest-assured,日志采用log4j,发现Rest-assured本身只支持打印日志到控制台,但期望打印到文件中以便排查问题 请求打印的语句只能输出到控制台 given().log ...
- C++的一些知识点摘抄(创建基本类 高级类)
问:对象有多大? 答:对象占据的内存量取决于其成员变量的长度,类函数不占据为对象分配的内容. 有些编译器在内存中对齐变量,这导致2字节变量实际占用的内存多于2字节. 问:为何不应将所有成员数据声明为公 ...