• Try finally的一个实验和为什么避免重载 finalize()方法--例子


    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的回收才执行的方法,除非,你真的有需要,否则,我也觉得,不要使用。
     
    引用:
  • 相关阅读:
    容器适配器————priority_queue
    容器适配器————queue
    容器适配器之总结
    序列式容器之总结
    序列式容器————forward_list
    序列式容器————list
    序列式容器————dequeue
    13.软件项目管理与敏捷方法——如何变更职责笔记
    10.软件项目管理与敏捷方法——沟通管理笔记
    09.软件项目管理与敏捷方法——人力资源管理笔记
  • 原文地址:https://www.cnblogs.com/ttylinux/p/6537009.html
Copyright © 2020-2023  润新知