Java中final、finally和finalize

final

  1. 修饰类时,意味着该类不能被继承,一个类不能既被final修饰又被abstract修饰。

  2. 修饰变量时,意味着该变量的值在赋值后不能被修改。修饰局部变量时必须在声明时就被赋值;修饰实例变量时,可以在构造器,非静态初始化块中指定初始值;修饰类变量时,可以在静态初始化块中指定初始值。

    变量 叙述
    成员变量 作用范围是整个类,相当于c++中的全局变量,定义在方法体和语句块之外,一般定义在类的声明之下;成员变量包括实例变量和静态变量
    实例变量 无static修饰
    静态变量(类变量) 用static修饰,一个类中只有一份,可以被该类的所有对象共享,存储在静态存储区
    局部变量变量 类的方法中的变量,访问修饰符不能作用于局部变量,声明在方法、构造方法或语句块中,在栈上分配,无默认值
  3. 修饰方法时,方法不能被子类重写

  4. 扩展:final修饰的变量可以执行“宏替换”,当用final修饰str1和str2时false就会变为true,在编译期间str1+str2可以确定是“helloworld”,与s1指向同一块地址。
    Java中final、finally和finalize


finally

  1. finally是异常处理语句结构的一部分,表示总是执行。
  2. 比如try-finally或try-catch-finally,可以用来关闭JDBC连接资源,一些IO流操作等

finalize

  1. finalize是Object的一个方法,它的目的是在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
  2. 这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
  3. finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。在这期间也可以使对象重新复活,从而使垃圾回收机制取消回收。
  4. 它最主要的用途就是回收特殊渠道申请的内存,有一种JNI(Java Native Interface)调用non-Java程序(C或C++),finalize()的工作就是回收这部分的内存。