问题

有一个 try/catch 代码块,其中包含一个打印语句。finally代码块总会被调用么?

示例:

try {
something();
return success;
}
catch (Exception e) {
return failure;
}
finally {
System.out.println("i don't know if this will get printed out.");
}

回答

  1. finally 将会被调用。

    只有以下情况 finally 不会被调用:

    • 当你使用 System.exit()
    • 其他线程干扰了现在运行的线程(通过 interrupt 方法)
    • 如果 JVM 已经“撞毁”了

    Answered by Jodonnell,edited by jpaugh.

  2. //示例代码

class Test
{
public static void main(String args[])
{
System.out.println(Test.test());
} public static int test()
{
try {
return 0;
}
finally {
System.out.println("finally trumps return.");
}
}
}

输出:

finally trumps return.
0

Answered by Kevin


原文链接:http://stackoverflow.com/questions/65035/does-finally-always-execute-in-java?page=1&tab=votes#tab-top

【译】StackOverflow——Java 中的 finally 代码块是否总会被执行?的更多相关文章

  1. 2.java中c#中statc 静态调用不同之处、c#的静态构造函数和java中的构造代码块、静态代码块

    1.java和c#静态成员调用的不同之处 static 表示静态的,也就是共享资源,它是在类加载的时候就创建了 java中   可以通过实例来调用,也可以通过类名.成员名来调用,但是一般最好使用类名. ...

  2. Java中的构造代码块

    代码块 ----a静态代码块 ----b构造代码块 ----c普通代码块 执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. a.静态代码块: 静态代码块 ...

  3. java中静态的代码块,静态变量,静态方法

    简单了解一下java虚拟机--jvm几个内存区域: 方法区:在java的虚拟机中有一块专门用来存放已经加载的类信息.常量.静态变量以及方法代码的内存区域, 常量池:常量池是方法区的一部分,主要用来存放 ...

  4. java中的静态代码块、构造代码块、构造方法

    运行下面这段代码,观察其结果: package com.test; public class HelloB extends HelloA { public HelloB() { } { System. ...

  5. 5.1JAVA基础复习——JAVA中的静态代码块、构造代码块、构造函数、局部代码块区别

    构造代码块: 在类中定义可以给所有对象进行初始化.局部代码块: 在方法中定义属性的生命周期.静态代码块: 在类中定义用于给类调用时属性的初始化 构造函数与构造代码块的区别: 构造函数是给对应的对象进行 ...

  6. Java中的局部代码块、构造代码块、静态代码块

    局部代码块: 作用:控制变量的生命周期: 在程序中,当我们已经使用完 x 后,并且在接下来的代码中,不会再用到x,那么就没必要让x 在内存中占用空间了,这用情况下,可以使用 局部代码块,将x及其所设计 ...

  7. java中的静态代码块等执行顺序

    http://www.cnblogs.com/naruto469/p/3608459.html public class Print { 2 3 public Print(String s){ 4 S ...

  8. java中的static代码块为什么只执行一次

    原因在最后,这是其中的一个小例子. 如: SessionFactory负责保存和使用所有配置信息,消耗内存资源非常大 所以一个web项目要保证只创建一个SessionFactory 那么在使用hibe ...

  9. java中,静态代码块static的简单简介

    直接上代码,更直观,包括一些解释: /** * 类初始化时,首先加载静态代码块, * 注意:所有静态代码块都会在方法之前执行,不管放置的位置:但是静态代码块按照顺序执行 * 再次执行调用的方法 */ ...

随机推荐

  1. debug模式下dlgdata.cpp line 43 断言失败

    我在VC6下显示Line 43, Line 624行失败 网上有Line 40行猜测是其他版本 运行程序出错,定位如下: HWND CDataExchange::PrepareCtrl(int nID ...

  2. win10企业版激活密钥

    NX9MP-TY3DJ-VYMW8-WWVRF-9W3F4

  3. Angular 学习笔记——ng-disable

    <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...

  4. vue笔记四

    十一.过渡与动画 1.使用限制Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加 entering/leaving 过渡条件渲染 (使用 v-if)条件展示 (使 ...

  5. Activity返回数据给上一个活动

    1.在A这个Activity中以startActivityForResult(intent, requestCode)启动B这个Activity 2.在B这个Activity中setResult(re ...

  6. Ubuntu16.04安装QQ

    说明:一开始,我在Ubuntu 16.04下安装的QQ版本是Wineqq2013SP6-20140102-Longene,但后来发现这个版本QQ在linux下问题很多,比如不能用键盘输入密码,QQ表情 ...

  7. OpenCV入门学习(三)HistogramEquivalent

    直方图均衡 #include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> #include & ...

  8. expect获取返回值

    对于获取多台server状态且不用交互须要用到expect,但有时候expect无法获取返回值.这里解释一下expect怎样获取返回值 expect -c "     spawn $1;   ...

  9. Oracle 修改表名

    .ALTER TABLE T_PLAT_KEYWORD_STATISTIC RENAME TO T_PLAT_KEYWORD; .create new_table as select * from o ...

  10. MATLAB 2014a 在Mac os x yosemite 10.10 Retina显示模糊的解决的方法

    恐怕非常多童鞋在升级了yosemite之后都遇到了Matlab的问题. 之前转载的一篇文章写了安装的方法,本文说一下解决Retina屏显示模糊的办法. 那么因为Matlab 2014a使用自带的jav ...