Java中final关键字小结
一、final、finally、finalize的区别
final:
修饰符(关键字)有三种用法:修饰类、变量和方法。
修饰类时,意味着它不能再派生出新的子类,即不能被继承,因此它和 abstract 是反义词。
修饰变量时,该变量使用中不被改变,必须在声明时给定初值,在引用中只能读取不可修改,即为常量。(下一节代码示例)
修饰方法时,也同样只能使用,不能在子类中被重写。
finally:
通常放在 try…catch 的后面构造最终执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码只要 JVM 不关闭都能执行,可以将释放外部资源的代码写在finally块中。
finalize:
Object 类中定义的方法。
Java 中允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
这个方法是由垃圾收集器在销毁对象时调用的,通过重写 finalize() 方法可以整理系统资源或者执行其他清理工作。
二、代码示例
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| public class zd_important_test_nbst { public static void main(String[] args) { UserTest userTest = new UserTest(); System.out.println(userTest.getA()); UserTest userTest1 = new UserTest(6); System.out.println(userTest1.getA()); } } class UserTest {
private final int a;
public UserTest() { super(); a = 1; }
public UserTest(int a) { this.a = a; }
public int getA() { return a; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; UserTest userTest = (UserTest) o; return a == userTest.a; }
@Override public int hashCode() { return Objects.hash(a); } }
|