- 浏览: 824623 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (530)
- Java编程 (64)
- C/C++/D (6)
- .Net/C# (9)
- Ruby (12)
- JavaScript (77)
- XML (1)
- JSON (1)
- Ajax (17)
- ExtJs (81)
- YUI (1)
- JQuery (7)
- DWR (1)
- HTML (7)
- CSS (7)
- Database (6)
- PowerDesigner (23)
- DB2 (2)
- Oracle (57)
- MS SQL Server (8)
- MySQL (6)
- JSP/Servlet/JSTL/TagLib (3)
- Spring (1)
- Hibernate (0)
- iText (0)
- Struts (0)
- Struts2 (0)
- iReport (0)
- FreeMarker (0)
- HttpClient (1)
- POI (6)
- FckEditor (15)
- Eclipse / MyEclipse (10)
- IntelliJ IDEA (0)
- NetBeans (0)
- Tomcat (11)
- WebLogic (1)
- Jboss (3)
- jetty (4)
- IIS (2)
- CVS/VSS (1)
- FTP (1)
- Windows/DOS (6)
- Linux/Unix (0)
- 软件建模 UML (0)
- Design Pattern & Thinking In Programming (10)
- 数据结构与算法 (12)
- 软件项目管理 (9)
- 行业应用解决方案 (3)
- 电脑软件与故障解决 (13)
- 编程语言 (1)
- 十万个为什么 (3)
- JBPM (2)
- sysbase (2)
- JDBC (8)
- Ant (2)
- Case-计算机辅助软件工程 (1)
- WebService (4)
- 浏览器 (1)
最新评论
-
gaoqiangjava:
同一楼,还请大手帮解决
JAVA读取word文件 -
hyl523:
// 判断数组中的第一个值是否未定义,如果未定义,便定义为空对 ...
javascript面向对象之二 命名空间 -
ping12132200:
ping12132200 写道我抱着个错不是因为:body标签 ...
extjs在IE报对象不支持此属性或方法 -
ping12132200:
我抱着个错不是因为:body标签内的第一个元素不能为文本tex ...
extjs在IE报对象不支持此属性或方法 -
fireinjava:
呀,不错,转走了,谢谢啦~
利用OpenOffice将word转换成PDF
关于try-catch-finally的用法我就不多说了。网上搜一下,资料很多。
这里我想主要讨论下在finally块加入return语句,屏蔽异常的问题。
我们先来看这样一段代码,
代码1:
view plaincopy to clipboardprint?
public class FinallyTest {
public static void main(String[] args) {
new FinallyTest().print();
}
public void print() {
int i = -1;
try {
Thread.sleep(1);
i = 1 / 0;
} catch (Exception e) {
System.out.println("at catch block step 1.");
throw e;
} finally {
System.out.println("at finally block i = " + i);
}
}
}
public class FinallyTest {
public static void main(String[] args) {
new FinallyTest().print();
}
public void print() {
int i = -1;
try {
Thread.sleep(1);
i = 1 / 0;
} catch (Exception e) {
System.out.println("at catch block step 1.");
throw e;
} finally {
System.out.println("at finally block i = " + i);
}
}
}
以上代码在Eclipse里是不会编译通过的,因为在catch块中throw了一个异常,而print方法并没有声明要抛出异常。
现在我们修改代码,让它能够通过编译,代码2:
view plaincopy to clipboardprint?
public class FinallyTest {
public static void main(String[] args) throws Exception {
new FinallyTest().print();
}
public void print() throws Exception {
…
public class FinallyTest {
public static void main(String[] args) throws Exception {
new FinallyTest().print();
}
public void print() throws Exception {
…
就是在print和main方法后加throws Exception,然后运行,看运行结果:
view plaincopy to clipboardprint?
at catch block step 1.
at finally block i = -1
Exception in thread "main" java.lang.ArithmeticException: / by zero
at wxhx.csdn2.FinallyTest.print(FinallyTest.java:12)
at wxhx.csdn2.FinallyTest.main(FinallyTest.java:5)
at catch block step 1.
at finally block i = -1
Exception in thread "main" java.lang.ArithmeticException: / by zero
at wxhx.csdn2.FinallyTest.print(FinallyTest.java:12)
at wxhx.csdn2.FinallyTest.main(FinallyTest.java:5)
程序先是走到了catch块的第一句,打印了at catch block step 1.
但并没有紧接着去throw e,即没有立刻抛出这个异常,之所以这样说,是因为异常的信息是在finally块的打印信息之后才打印的。
这个例子告诉我们,finally不管出现异常与否,都必须去执行的代码。(如果中途终止了jvm,就不必去执行了)
那么何时执行finally块中的代码呢?
在这个例子中,try块中有异常抛出,所以finally块中的代码是在执行了catch语句之后、退出方法之前被执行的 (如果这里执行了throw e,则方法就退出了) 。
下面再看另外一个代码,代码3:
view plaincopy to clipboardprint?
public class FinallyTest {
public static void main(String[] args) {
new FinallyTest().print();
}
public void print() {
int i = -1;
try {
Thread.sleep(1);
i = 1 / 0;
} catch (Exception e) {
System.out.println("at catch block step 1.");
throw e;
} finally {
System.out.println("at finally block i = " + i);
return;
}
}
}
public class FinallyTest {
public static void main(String[] args) {
new FinallyTest().print();
}
public void print() {
int i = -1;
try {
Thread.sleep(1);
i = 1 / 0;
} catch (Exception e) {
System.out.println("at catch block step 1.");
throw e;
} finally {
System.out.println("at finally block i = " + i);
return;
}
}
}
这段代码与之前相比,在finally块中增加了return语句。
虽然在catch块中有throw e语句,但在print方法后并不用声明throws Exception,也可以通过编译。
因为在try块中有Thread.sleep(1);语句,所以必须要捕获InterruptedException,但在这种情况下,即使我们把catch块去掉了,也不会有问题,这是怎么回事呢?
因为在finally块中的return语句屏蔽了异常。
经过代码2我们已经知道了,异常在finally块被执行之前,虽然会执行catch块中的代码,但并不会退出方法,在退出方法之前,会转向finally块中执行,而在finally块中又恰好有return语句,所以方法就正常退出了,在try块中产生的异常就不会有机会被抛出。
总结:
1.执行retrun的话就会跳出函数返回了.
2.try-catch-finally的顺序是
没有异常的话,try一直执行至try中retrun前,就会去执行finally中的代码,如果finally中无retrun就会做try中的retrun,try中也没有retrun的话就会做try-catch-finally外的代码了.
如果在try中有异常的话,在异常处就会抛出,try中的就不再执行,去执行catch中的代码(前题是抛出的是catch中的异常,能被catch),catch中如果碰到retrun或到尽头,就会去执行finally中的代码,finally中的代码如有retrun就retrun,无就去catch中的retrun,如果catch都无retrun,就会执行try-catch-finally外的代码.
3.可见finally中的代码是一定会全执行的(retrun前)
4.retrun后的代码是无效的.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bzwm/archive/2009/02/13/3885720.aspx
发表评论
-
java调用dll方法
2011-06-02 21:56 1545Java语言本身具有跨平台性,如果通过Java调用DLL的技术 ... -
DIV+CSS
2011-05-31 13:07 868http://www.divcss5.com/ -
getWriter() has already been called for this response的解决办法
2011-05-30 14:15 3679Servlet规范说明,不能既调用 response.getO ... -
CVS客户端
2011-05-27 14:54 832http://www.syntevo.com/index.ht ... -
UML工具
2011-05-25 18:59 870http://www.umlchina.com/Tools/N ... -
applicationcontext.xml怎么分模块简化配置?
2011-05-22 18:02 2212(1) 在用spring做项止的时候,我们经常会在appli ... -
Struts1.2分模块后的路径问题
2011-05-22 18:00 15821.某项目分模块的web.xml配置如下: <i ... -
java API chm html 1.5 1.6 中文版英文版 帮助文档
2011-05-14 10:45 2645J2SE DK & API下载 ————————- h ... -
ClientAbortException原因探究
2010-12-23 16:17 1836WEB是部署在TOMCAT5.5.17下面的,采用JNDI链接 ... -
java游戏 http://blog.csdn.net/cping1982/archive/2009/06/10/4258704.aspx
2010-11-08 22:31 1203http://blog.csdn.net/cping1982/ ... -
Java中字符串(String)的存储和赋值原理
2010-11-08 22:14 1197可能很多java的初学者对String的存储和赋值有迷惑, ... -
Java中字符串的最大长度
2010-11-08 22:12 1281在cpp中为了可移植性,string的长度是string::s ... -
Java与XML联合编程之DOM篇
2010-10-06 13:37 859一、DOM初步 DOM是Document Object ... -
jexl解析表达式字符串
2010-10-06 11:44 1922网址:http://commons.apache.org/je ... -
Java中getResourceAsStream的用法
2010-10-06 11:31 1974Java中getResourceAsStream的用法 首先 ... -
Class.getResourceAsStream 和 ClassLoader.getResourceAsStream
2010-10-06 11:08 822Class.getResourceAsStream 和 Cla ... -
利用第三方的Jar包内的类和方法来判别文件编码
2010-08-06 13:07 1735今天在论坛里看见了一个人发帖子问,如何查看文件的编码。有一个人 ... -
将Java程序作成exe文件的几种方法
2010-08-06 13:04 937看到网上有同志的介绍将Java程序作成exe文件的方法,写的不 ... -
Java基本类型转换总结
2010-07-26 19:49 1353数值型转换成字符型 // 基本数据类型, int i_a ... -
怎样不使用中间变量来交换两个变量的值?
2010-07-10 21:39 1439int 的话就+后再减.string 的话就连接再截取. ...
相关推荐
try-catch-finally捕获异常try-catch-finally捕获异常
使用try-catch-finally处理异常
异常+异常处理+try-catch-finally+教程 - 本资源是一个异常处理的教程,教你如何用Java的try-catch-finally语句处理异常,包括抛出和捕获异常,自定义异常,多个异常,finally块等。
try-catch-finally.js 843字节库,可在JavaScript中更灵活地捕获错误。内容注意事项按名称捕获可能不起作用按类型捕获在跨框架/过程中不起作用错误被消耗测验 安装 浏览器< script src =" try-catch-finally.js ...
学习Java异常必要了解try_catch_finally的说明和使用讲解注意事项
The production IfStatement : if ( Expression ) Statement else Statement is evaluated as follows:.
try块中包含可能会产生异常的代码,当try块内的代码发生异常时,程序...另外,finally块是可选的,它会在try-catch块执行完毕后始终被执行,无论是否发生异常。finally块通常用于释放资源、关闭文件等必要的清理工作。
:rocket: 不试 :rocket: 删除那些难看的try-catch-finally块,清理代码库! :smiling_face_with_heart-eyes: 关于在可能期望方法throw的代码库中工作可能会导致逻辑包裹在try-catch块中的情况。 它还导致其他代码...
Java的 try 与 catch finally关键字的使用
try-catch-finally执行顺序验证(左边是.java文件,右边是.class文件) 提示: try、catch块内的return操作编译后会变成把return的值保存到变量var的操作。 总结: try、catch块内的return操作编译后会变成把return的值...
17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句...
压缩包里有本人录制的一个小视屏,不会的亲们,可以看下哦~~~ 笨人要期末考了呢,录些小视屏供自己复习所用,也是为了资源共享~O(∩_∩)O~
我们知道return语句用在某一个方法中,一是用于返回函数的执行结果,二是用于返回值为void类型的函数中,仅仅是一个return语句(return ;),此时用于结束方法的执行,也即此return后的语句将不会被执行,当然,这种...
记得园子里有位网友使用StopWatch分析过Try-Catch在不同情况下,与无Try-Catch的代码相比,代码运行的时间指标,结果并没有很大差异。 下面我来结合IL分析一下Try-Catch吧。 ● 机制分析 .Net 中基本的异常捕获与...
第二:finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的后。可行的做法有四: 1、return语句只在函数后出现一次。 2、return语句仅在try和catch里面都出现。 3、...
Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据
下面小编就为大家带来一篇java中使用try-catch-finally一些值得注意的事(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
5.2.1 使用try-catch捕获异常;5.2.1 使用try-catch捕获异常;5.2.1 使用try-catch捕获异常;5.2.1 使用try-catch捕获异常;5.2.2 使用finally回收资源;5.2.2 使用finally回收资源;5.2.2 使用finally回收资源;5.2.3 学生...
(1)会使用try-catch-finally捕获和处理异常 (2)会使用throw和throws (3)会使用log4j记录日志 3.实践 实践一:使用try-catch进行异常处理 需求说明 (1)使用UserDaoImp1类的方法查找用户,并用User类的...