最近学生去面试,被一个sb面试官忽悠了。那个家伙竟然说try块执行后不会执行finally。今天在http://wangwangzhi.iteye.com/blog/1632842上看到这篇文章摘录过来,供大家借鉴下。
使用 Integer.valueOf 方法模拟异常,来说明关于
try catch finally 之间的问题。
示例
1:没有异常,正常情况
Java代码
-
public
class
TryCatchFinally {
-
-
public
static
void
main(String[] args) {
-
try
{
-
System.out.println("try statement :-)"
);
-
Integer.valueOf("2"
);
-
} catch
(NumberFormatException nfe) {
-
System.out.println("catch statement :-)"
);
-
} finally
{
-
System.out.println("finally statement :-)"
);
-
}
-
}
-
}
示例 2:没有异常,正常情况,但是 try 语句里面添加
return
Java代码
-
public
class
TryCatchFinally {
-
-
public
static
void
main(String[] args) {
-
try
{
-
System.out.println("try statement :-)"
);
-
Integer.valueOf("2"
);
-
return
;
-
} catch
(NumberFormatException nfe) {
-
System.out.println("catch statement :-)"
);
-
} finally
{
-
System.out.println("finally statement :-)"
);
-
}
-
}
-
}
示例 1 和 示例 2 的运行结果一致:
示例
3:制造异常
Java代码
-
public
class
TryCatchFinally {
-
-
public
static
void
main(String[] args) {
-
try
{
-
System.out.println("try statement :-)"
);
-
Integer.valueOf("bluetooth"
);
-
} catch
(NumberFormatException nfe) {
-
System.out.println("catch statement :-)"
);
-
} finally
{
-
System.out.println("finally statement :-)"
);
-
}
-
}
-
}
示例 4:制造异常,catch 语句里面添加
return
Java代码
-
public
class
TryCatchFinally {
-
-
public
static
void
main(String[] args) {
-
try
{
-
System.out.println("try statement :-)"
);
-
Integer.valueOf("bluetooth"
);
-
} catch
(NumberFormatException nfe) {
-
System.out.println("catch statement :-)"
);
-
return
;
-
} finally
{
-
System.out.println("finally statement :-)"
);
-
}
-
}
-
}
示例 3 和 示例 4 的运行结果一致:
由此,可以看出以上四种情况,finally
语句都被执行了。
示例 5:制造异常,catch 语句里面添加 return
目的:验证finally代码块后面的代码是否会被执行
??????
Java代码
-
public
class
TryCatchFinally {
-
-
public
static
void
main(String[] args) {
-
try
{
-
System.out.println("try statement :-)"
);
-
Integer.valueOf("bluetooth"
);
-
} catch
(NumberFormatException nfe) {
-
System.out.println("catch statement :-)"
);
-
return
;
-
} finally
{
-
System.out.println("finally statement :-)"
);
-
}
-
-
System.out.println("out of try...catch...finally statement"
);
-
}
-
}
执行结果:
如果将 catch 语句里面添加 return 注释掉,执行结果:
示例 6:制造异常,try 语句里面添加
return
Java代码
-
public
class
TryCatchFinally {
-
-
public
static
void
main(String[] args) {
-
try
{
-
System.out.println("try statement :-)"
);
-
Integer.valueOf("dd"
);
-
return
;
-
} catch
(NumberFormatException nfe) {
-
System.out.println("catch statement :-)"
);
-
} finally
{
-
System.out.println("finally statement :-)"
);
-
}
-
-
System.out.println("out of try...catch...finally statement"
);
-
}
-
}
执行结果:
示例 7:无异常,try 语句里面添加
return
Java代码
-
public
class
TryCatchFinally {
-
-
public
static
void
main(String[] args) {
-
try
{
-
System.out.println("try statement :-)"
);
-
Integer.valueOf("2"
);
-
return
;
-
} catch
(NumberFormatException nfe) {
-
System.out.println("catch statement :-)"
);
-
} finally
{
-
System.out.println("finally statement :-)"
);
-
}
-
-
System.out.println("out of try...catch...finally statement"
);
-
}
-
}
执行结果(无异常,return 返回,所以finally代码块后面的语句就不会执行:-)
以上种种迹象表明:
finally
语句都被执行了,但是还有另外一种情况没有被验证,接着往下看
就是在 try...catch... 里面退出 JVM
:
Java代码
-
public
class
TryCatchFinally {
-
-
public
static
void
main(String[] args) {
-
try
{
-
System.out.println("try statement :-)"
);
-
Integer.valueOf("2eer"
);
-
System.exit(0
);
-
} catch
(NumberFormatException nfe) {
-
System.out.println("catch statement :-)"
);
-
System.exit(0
);
-
} finally
{
-
System.out.println("finally statement :-)"
);
-
}
-
-
System.out.println("out of try...catch...finally statement"
);
-
}
-
}
执行结果:
try 或者 catch 语句里面(任意一个)调用
System.exit ,那么 finally 语句就不会被执行。
相关推荐
2. **资源管理**:Try…Catch 结合 Finally 语句块常用于确保资源(如数据库连接、文件流等)在任何情况下都能被正确关闭。例如,在示例中,即使在打开数据库连接时出现异常,Finally 块也会确保在程序退出前关闭...
不要在性能要求关键的函数中使用try-catch-finally 4.避免使用全局变量 5.避免在性能要求关键的函数中使用for-in 6.使用字符串累加计算风格 7.原操作会比函数调用快 8.设置setTimeout() 和 setInterval() 时传递函数...
8. 小结: 合理使用异常处理技术,可以帮助我们准确地定位和解决程序中的问题,提升代码的可维护性和可扩展性。在实际开发中,我们需要根据具体的业务需求和程序逻辑,灵活运用异常处理机制,以提高程序的健壮性和...
#### 七、小结 通过以上介绍,我们可以了解到Java异常处理机制的强大之处。正确地使用异常处理不仅可以提高程序的健壮性,还可以让程序更加易于维护和扩展。在实际开发中,合理地使用异常处理机制对于构建高质量的...
可以有`try-catch-finally`结构,也可以只有`try-finally`结构。 在某些情况下,我们不想在当前方法中处理异常,而是希望将异常传递给调用者。这时,可以在方法声明中使用`throws`关键字,表明该方法可能会抛出指定...
小结 [第9节] 1.2.1为什么需要封装1 [第10节] 1.2.1为什么需要封装2 [第11节] 1.2.2如何实现封装2 [第12节] 1.2.3如何使用包1 [第13节] 1.2.3如何使用包2 [第14节] 1.2.4类成员的访问控制1 [第15节] 1.2.4类成员的...
- **异常处理**:Java通过try-catch-finally语句块进行异常处理,确保程序在遇到错误时能够有序地执行或记录错误信息。 2. **Java环境配置** - **JDK安装**:Java Development Kit(JDK)是Java开发所需的基本...
#### 小结 异常处理是程序设计中非常重要的一个环节,特别是在 C# 这样的面向对象语言中。合理使用 try/catch/finally 结构可以帮助开发者有效地管理程序中的异常情况,提高程序的稳定性和用户体验。同时,合理的...
#### 小结 本章节主要介绍了Java中的异常处理机制和Swing GUI编程的基础知识。通过学习异常处理,可以有效提高程序的健壮性和稳定性;而了解Swing组件和布局管理器,则有助于开发美观且功能丰富的图形用户界面。
1.异常的概念2....捕获并处理异常(try……catch/finally)try……catch块 try……多catch块 try……catch/finally块 4.抛出异常throws5.自定义异常 自定义异常的来由 操作步骤 实例 5.小结 throw与throws的区别
Java 异常处理操作实例小结 Java 异常处理是 Java 编程语言中的一种错误处理机制,用于捕获和处理运行时的异常情况。本文将通过实例形式总结分析 Java 异常处理操作的常见情况与相关处理技巧。 一、异常处理的使用...
- **try-catch-finally异常语句**:综合运用以上异常处理结构。 - **2.8 小结**:回顾本章关键点。 #### 三、面向对象设计基础 - **3.1 什么是面向对象** - **传统的面向过程**:比较面向对象与面向过程的不同...
8. **异常处理**:Java使用try-catch-finally结构来捕获和处理运行时错误,异常类层次结构使得可以精确地捕获和处理特定类型的异常。 9. **输入输出(I/O)**:Java的I/O流系统是处理数据传输的基础,包括文件操作...
在Java中,通常使用try-catch-finally结构来捕获并处理可能出现的`IOException`。 6. 文件锁定 在多线程环境中,为防止多个线程同时对同一文件进行读写,可以使用文件锁。Java中的`FileChannel`提供了锁机制,其他...
- try-catch-finally语句的使用。 - **8.5 小结** - 流程控制是程序设计的基础,掌握这些语句可以让程序更加灵活。 #### 第三部分:面向对象的C# ##### 第九章:面向对象的程序设计 - **9.1 面向对象的基本概念...
同时,还要注意错误处理和资源管理,比如使用try-catch-finally结构捕获异常,释放占用的资源。此外,如果项目中存在大量Job,可以考虑使用JobGroup进行分类管理。 总之,Quartz作为强大的任务调度框架,提供了丰富...
异常处理是通过try-catch-finally结构来捕获和处理程序运行时可能出现的问题,保证程序的健壮性。 4. **集合IO** 集合框架与I/O流的结合是Java开发中的重要部分。集合负责在内存中组织和管理数据,而I/O流则处理...
- 包括`try-catch-finally`等。 - **8.5 小结** - 概述了流程控制的各种方法。 #### 第三部分:面向对象的C# ##### 第九章:面向对象的程序设计 - **9.1 面向对象的基本概念** - 包括类、对象、封装、继承、...
- try-catch-finally块用于捕获和处理异常。 - **8.5 小结** - 概述了C#中的流程控制结构,帮助开发者编写更加灵活和健壮的程序。 #### 第三部分:面向对象的C# ##### 第九章:面向对象的程序设计 - **9.1 面向...