public class TryFinallTest {

public TryFinallTest(){

}
public void runSomething(String str){
System.out.println(str);
} public static void typeOne(){ TryFinallTest one = new TryFinallTest();
try{
one.runSomething("runing something");
return;
}finally{
one.runSomething("do final work");
}
}
public static void main(String[] args){ TryFinallTest.typeOne();
}
}
输出结果:
runing something
do final work
也就是,只要存在try finally,那么,finally包围的语句块一定会执行。
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
<<effectiva Java>>中提到,避免使用finalize方法来执行资源清理工作,避免使用finallize方法。
那么,为什么?
例子1:
public class TryCatchFinallyTest implements Runnable {

private void testMethod() throws InterruptedException {
try {
System.out.println("In try block");
throw new NullPointerException();
} catch (NullPointerException npe) {
System.out.println("In catch block");
} finally {
System.out.println("In finally block");
}
} @Override
protected void finalize() throws Throwable {
System.out.println("In finalize block");
super.finalize();
} @Override
public void run() {
try {
testMethod();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} ////////////////////////////////
public class TestMain2 {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
for (int i = 1; i <= 3; i++) {
new Thread(new TryCatchFinallyTest()).start();
}
}
}
输出结果:
In try block
In try block
In catch block
In finally block
In catch block
In finally block
In try block
In catch block
In finally block
 
我们是期望,finalize方法会被执行的。但是,finalize方法没有被执行。finalize方法,是在该对象被GC回收的时候,被GC调用执行的,而我们不知道GC什么时候进行垃圾回收。
Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
 
面对这种,依赖于GC,依赖于GC的回收才执行的方法,除非,你真的有需要,否则,我也觉得,不要使用。
 
引用:

Try finally的一个实验和为什么避免重载 finalize()方法--例子的更多相关文章

  1. 故意使用free掉的内存的一个实验( 常量区/栈)

    故意使用free掉的内存的一个实验 考虑一下两种声明 struct stuff{ char home[10]; int num; char name[10]; }; struct stuff{ cha ...

  2. CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子

    CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子 本文涉及的VolumeRendering相关的C#代码是从(https://github.com/toolchai ...

  3. Java中将一个字符串传入数组的几种方法

    String Str="abnckdjgdag"; char a[]=new char[Str.length()]; -------------------方法1 用于取出字符串的 ...

  4. 分享一个解决MySQL写入中文乱码的方法

    分享一个解决MySQL写入中文乱码的方法 之前有发帖请教过如何解决MySQL写入中文乱码的问题.但没人会,或者是会的人不想回答.搜索网上的答案并尝试很多次无效,所以当时就因为这个乱码问题搁浅了一个软件 ...

  5. C#判断一个类中有无"指定名称"的方法

    C#中可以通过反射分析元数据来解决这个问题,示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...

  6. 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子

    原地址:http://www.cnblogs.com/xuling/archive/2013/03/04/2943154.html 最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西 ...

  7. 一个使用C#的TPL Dataflow Library的例子:分析文本文件中词频

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:一个使用C#的TPL Dataflow Library的例子:分析文本文件中词频.

  8. 判断一个指定的Service是否存在的方法

    这是一个判断一个指定的Service是否存在的方法.它被用于监视一个Service是否由于已经运转,如果由于各种原因Service已经被停止了.这是在重新启动指定Service.它被用于一个Appli ...

  9. 分享一个解析XML成为php数组的方法

    原文:分享一个解析XML成为php数组的方法 <?php /* * To change this template, choose Tools | Templates * and open th ...

随机推荐

  1. lintcode-511-交换链表当中两个节点

    511-交换链表当中两个节点 给你一个链表以及两个权值v1和v2,交换链表中权值为v1和v2的这两个节点.保证链表中节点权值各不相同,如果没有找到对应节点,那么什么也不用做. 注意事项 你需要交换两个 ...

  2. 1014 我的C语言文法定义与C程序推导过程

    程序> -> <外部声明> | <程序> <外部声明> <外部声明> -> <函数定义> | <声明> < ...

  3. CNN误差反传时旋转卷积核的简明分析(转)

    CNN(卷积神经网络)的误差反传(error back propagation)中有一个非常关键的的步骤就是将某个卷积(Convolve)层的误差传到前一层的池化(Pool)层上,因为在CNN中是2D ...

  4. PHP中继承

    继承 基本概念 将一个类A中的特性信息,传递到另一个类B中,此时就称为: B继承A A派生出B: 基本语法: 几个基本概念 继承:一个类从另一个已有的类获得其特性,称为继承. 派生:从一个已有的类产生 ...

  5. hdu-题目1159:Common Subsequence

    http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Java/Oth ...

  6. 第96天:CSS3 背景详解

    一.背景大小 background: url("images/bg.jpg") no-repeat;控制背景的大小1.具体数值background-size: 500px 500p ...

  7. 第77天:jQuery事件绑定触发

    一.元素操作 1. 高度和宽度 $(“div”).height(); // 高度 $(“div”).width(); // 宽度 .height()方法和.css(“height”)的区别: 返回值不 ...

  8. logstash收集MySQL慢查询日志

    #此处以收集mysql慢查询日志为准,根据文件名不同添加不同的字段值input { file { path => "/data/order-slave-slow.log" t ...

  9. 题解 P1888 【三角函数】

    堆排序万岁! 小金羊又来水题了 #include <iostream> #include <queue> using namespace std; priority_queue ...

  10. Shortest Prefixes POJ - 2001(统计次数)

    题意: 输出每个单词的缩写  使得每个单词 互不相同.. 解析: 统计每个前出现的次数...然后在查询的时候  遇到次数为1的返回即可.. #include <iostream> #inc ...