• Java中final,finalize和finally的区别


    转载:https://blog.csdn.net/cassiepython/article/details/50544828

    final

    final关键字可以用于类,方法,变量前,用来表示该关键字修饰的类,方法,变量具有不可变的特性。
     
    (1)final关键字用于基本数据类型前:这时表明该关键字修饰的变量是一个常量,被声明为final的变量必须在声明时给出变量的初始值,在定义后该变量的值就不能被修改。
    (2)final关键字用于方法声明前:这时意味着该方法时最终方法,只能被调用,不能被覆盖,但是可以被重载。
    (3)final关键字用于类名前:此时该类被称为最终类,该类不能被其他类继承。被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承。因此一个类不能既被abstract             声明,又被final声明
     
    对于(1):
     
    对于(2):
     
     
    对于(3):
     
     

    finalize

    finalize方法来自于java.lang.Object,用于回收资源。
    可以为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用。
    在实际应用中,不要依赖使用该方法回收任何短缺的资源,这是因为很难知道这个方法什么时候被调用。
     
    [java] view plain copy
     
    1. <span style="font-size:14px;">class People{  
    2.       
    3.     final void output(String name){  
    4.         System.out.println(name);  
    5.     }  
    6. }  
    7. class Stu extends People{  
    8.       
    9.     final void output(String name,int id){//可以被重载  
    10.         System.out.println(name);  
    11.     }  
    12.     public void finalize() throws Throwable{             
    13.         super.finalize();    
    14.         System.out.println("finalize method was called!");  
    15.     }  
    16. }  
    17. public class Main {  
    18.       
    19.     public static void main(String[] args){  
    20.     }  
    21. }</span>  
     

    finally

    当代码抛出一个异常时,就会终止方法中剩余代码的处理,并退出这个方法的执行。假如我们打开了一个文件,但在处理文件过程中发生异常,这时文件还没有被关闭,此时就会产生资源回收问题。对此,java提供了一种好的解决方案,那就是finally子句,finally子句中的语句是一定会被执行的,所以我们只要把前面说的文件关闭的语句放在finally子句中无论在读写文件中是否遇到异常退出,文件关闭语句都会执行,保证了资源的合理回收。不管有没有异常被抛出、捕获,finally块都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到catch块中执行。finally块则是无论异常是否发生,都会执行finally块的内容,所以在代码逻辑中有需要无论发生什么都必须执行的代码,就可以放在finally块中。
     
    [java] view plain copy
     
    1. import java.io.FileInputStream;  
    2. import java.io.FileNotFoundException;  
    3. import java.io.IOException;  
    4. import java.io.InputStream;  
    5.   
    6. public class Finally {  
    7.     void fileWith(){  
    8.         InputStream in = null;  
    9.         try {  
    10.             in = new FileInputStream("wang.txt");  
    11.             //其他操作  
    12.         } catch (FileNotFoundException e) {  
    13.             e.printStackTrace();  
    14.         }finally{  
    15.             try {  
    16.                 in.close();  
    17.             } catch (IOException e) {  
    18.                 e.printStackTrace();  
    19.             }  
    20.         }  
    21.     }  
    22. }  


  • 相关阅读:
    flask2 未整理
    flask1 未整理
    libvirt创建kvm虚拟机步骤
    libvirt之 virsh命令总结
    kvm的xml文件解释
    virsh命令和调用libvirt api的区别
    KVM
    libvirt
    kvm
    oracle中正则表达式的使用
  • 原文地址:https://www.cnblogs.com/jingRegina/p/8874771.html
Copyright © 2020-2023  润新知