- 浏览: 856361 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (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 1633Java语言本身具有跨平台性,如果通过Java调用DLL的技术 ... -
DIV+CSS
2011-05-31 13:07 925http://www.divcss5.com/ -
getWriter() has already been called for this response的解决办法
2011-05-30 14:15 3748Servlet规范说明,不能既调用 response.getO ... -
CVS客户端
2011-05-27 14:54 955http://www.syntevo.com/index.ht ... -
UML工具
2011-05-25 18:59 926http://www.umlchina.com/Tools/N ... -
applicationcontext.xml怎么分模块简化配置?
2011-05-22 18:02 2282(1) 在用spring做项止的时候,我们经常会在appli ... -
Struts1.2分模块后的路径问题
2011-05-22 18:00 16331.某项目分模块的web.xml配置如下: <i ... -
java API chm html 1.5 1.6 中文版英文版 帮助文档
2011-05-14 10:45 2706J2SE DK & API下载 ————————- h ... -
ClientAbortException原因探究
2010-12-23 16:17 1902WEB是部署在TOMCAT5.5.17下面的,采用JNDI链接 ... -
java游戏 http://blog.csdn.net/cping1982/archive/2009/06/10/4258704.aspx
2010-11-08 22:31 1316http://blog.csdn.net/cping1982/ ... -
Java中字符串(String)的存储和赋值原理
2010-11-08 22:14 1256可能很多java的初学者对String的存储和赋值有迷惑, ... -
Java中字符串的最大长度
2010-11-08 22:12 1374在cpp中为了可移植性,string的长度是string::s ... -
Java与XML联合编程之DOM篇
2010-10-06 13:37 919一、DOM初步 DOM是Document Object ... -
jexl解析表达式字符串
2010-10-06 11:44 2014网址:http://commons.apache.org/je ... -
Java中getResourceAsStream的用法
2010-10-06 11:31 2037Java中getResourceAsStream的用法 首先 ... -
Class.getResourceAsStream 和 ClassLoader.getResourceAsStream
2010-10-06 11:08 876Class.getResourceAsStream 和 Cla ... -
利用第三方的Jar包内的类和方法来判别文件编码
2010-08-06 13:07 1819今天在论坛里看见了一个人发帖子问,如何查看文件的编码。有一个人 ... -
将Java程序作成exe文件的几种方法
2010-08-06 13:04 985看到网上有同志的介绍将Java程序作成exe文件的方法,写的不 ... -
Java基本类型转换总结
2010-07-26 19:49 1422数值型转换成字符型 // 基本数据类型, int i_a ... -
怎样不使用中间变量来交换两个变量的值?
2010-07-10 21:39 1566int 的话就+后再减.string 的话就连接再截取. ...
相关推荐
下面将详细介绍try-catch-finally语句的使用方法和注意事项。 一、try块 try块是try-catch-finally语句的核心部分,用于包装可能出现异常的代码。try块中的代码在执行时,如果出现异常,会被catch块捕获和处理。...
总的来说,正确地使用`try-catch-finally`可以帮助我们编写出更加健壮的代码,能够优雅地处理异常,保持程序的稳定运行,并提供有价值的错误反馈,从而提高用户体验。理解并熟练掌握异常处理是每个IT专业人士必备的...
在编程语言中,异常处理是确保程序稳定性和健壮性的重要...这些文件可能包含了具体的示例,演示了如何在不同情况下使用 `try-catch-finally` 结构以及 `return` 语句,从而帮助开发者更好地理解和掌握这一关键概念。
- JavaScript语言中try-catch-finally语句的具体使用方法。 - 如何根据不同的错误类型进行区分处理。 - 在异常处理中实现错误记录和用户提示等操作。 通过本文,编程人员可以了解到异常处理的重要性,以及如何在...
try-catch-finally结构是Java中处理异常的基础,其基本用法包括:try块用于包裹可能出现异常的代码,catch块用于捕获并处理特定类型的异常,而finally块则用于执行无论是否发生异常都需要执行的代码,例如资源清理和...
### try-catch 的用法与含义详解 在编程过程中,异常处理是确保程序稳定性和健壮性的关键环节之一。`try-catch` 结构作为异常处理的核心机制,在各种编程语言中广泛采用,如 Java、C# 和 JavaScript 等。本文将深入...
此外,`try`语句还可以嵌套使用,即在`try`、`catch`或`finally`块内部嵌套另一个`try`语句。通过嵌套,可以更细致地处理更复杂的异常情况。 使用`try-catch-finally`结构时,需要注意以下几点: 1. `catch`块的...
在介绍的知识点中,我们看到了一段具体的Java代码,用于演示如何使用`try-catch-finally`来处理除以零的异常情况。下面将详细介绍该结构的三个部分:`try`块、`catch`块和`finally`块。 首先,`try`块用于包裹可能...
在Java中,`try-catch-finally`结构可以单独使用,也可以嵌套使用。嵌套的`try-catch-finally`允许我们处理不同层次的异常,每个`try`块捕获不同类型的异常,`finally`块则确保所有必要的清理工作都能完成。 视频...
### try-catch 用法详解 #### 一、引言 ...理解并熟练掌握 `try-catch` 的使用方法对于每个开发者来说都是至关重要的。希望本文能够帮助读者更深入地了解 `try-catch` 机制,并在日常开发中灵活运用。
异常+异常处理+try-catch-finally+教程 - 本资源是一个异常处理的教程,教你如何用Java的try-catch-finally语句处理异常,包括抛出和捕获异常,自定义异常,多个异常,finally块等。
通过恰当使用try-catch-finally结构,开发者能够确保程序在遇到错误时不会立即崩溃,而是能够优雅地进行错误处理和资源清理。这使得C#不仅成为了一种功能强大的编程语言,也成为了开发高质量、高稳定性的应用的首选...
try-catch-finally语句是C#中处理异常的核心结构,然而,许多开发者在使用过程中容易陷入各种误区。本文将详细介绍try-catch-finally的5个黄金法则,帮助你避开异常处理中的常见陷阱,让你的代码更加可靠。 二、...
Java 异常处理:`try-catch-finally` 与自定义异常全解析
本文将深入探讨C#中的异常处理进阶知识,特别是如何构建一个包含5层防御体系的try-catch-finally结构。 首先,异常处理在C#编程中是确保程序稳定性和健壮性的关键环节。try-catch-finally结构是异常处理的核心机制...
try-catch-finally.js 843字节库,可在JavaScript中更灵活地捕获错误。内容注意事项按名称捕获可能不起作用按类型捕获在跨框架/过程中不起作用错误被消耗测验 安装 浏览器< script src =" try-catch-finally.js ...
如果在finally块中也有代码可能导致异常抛出,可以在finally块内部再次使用try-catch结构来处理这些异常。 从上述示例可以看出,try-catch-finally的组合使用提供了一种优雅的方式来处理程序运行中可能出现的异常...
C# 语法简洁易懂,易于学习和上手,让开发者能快速实现想法。其跨平台能力也十分出色,...如果你正在寻找一种能提高开发效率、实现高质量项目的语言,C# 绝对是你的不二之选。让我们一起拥抱 C#,开启精彩的编程之旅!
学习Java异常必要了解try_catch_finally的说明和使用讲解注意事项