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类 其他都是编译时产生的 ...
随机推荐
- python使用smtplib和email发送腾讯企业邮箱邮件
公司每天要发送日报,最近没事搞了一下如何自动发邮件,用的是腾讯企业邮箱,跟大家分享一下我的研究过程吧. 以前弄的发邮件的是用qq邮箱发的,当时在网上查资料最后达到了能发图片,网页,自定义收件人展示,主 ...
- Spring MVC3.2 通过Servlet3.0实现文件上传
Servlet3.0规范增加了对文件上传的原生支持,这里记录一下Spring MVC3通过Servlet3上传文件的实现. 配置文件: applicationContext.xml <!-- s ...
- EBS R12 Vision Profile default value - IRC: Geocode Host
Profile Option Name Site Application Responsibility Server Server Org User IRC: Geocode Host http:// ...
- 有關更新Java 至UPDATE 45 後出現沒法進入ORACLE EBS
近日部份使用者在更新Java 至UPDATE 45 後出現沒法進入ORACLE. 解決方法如下. 在開始 => 程式集 => JAVA => Configure Java中 (Ja ...
- xshell显示隐藏窗口页签
有时候不知道操作说了什么红框中的页签会消失,可以ctrl+shift+t 控制显示隐藏
- asp.net core部署到iis
asp.net core项目部署到IIS稍微不同于之前,记录几个要点: 一.下载安装.NET Core 托管捆绑包,下载地址,这个链接或许不是最新的了,官方文档里面有这个链接,到下图所示位置即可找到. ...
- 【OCP-12c】2019年CUUG OCP 071考试题库(73题)
73.Which statement correctly grants a system privilege? A. GRANT CREATE VIEW ON table1 TO user1; B. ...
- 【OCP-12c】CUUG 071题库考试原题及答案解析(21)
3.choose three View the Exhibit and examine the description of SALES and PROMOTIONS tables. You want ...
- 微信小程序 —— button按钮去除border边框
button默认有边框,边框用“border : none”去掉就不可以,边框依然存在, 使用 button::after{ border: none; } 来去除边框,边框就没了 wxml: < ...
- String类的操作方法
因String属于java核心包lang包的东西,所以不需要导包! /* * 字符串操作 * */ String name = "jck"; String name1 = &quo ...