哪些容易忘记的知识点-《final、finally、finalize 有何区别》

70 阅读2分钟

一、final:

1、修饰符(关键字)如果一个类被声明为final,意味着它不能再派生新的子类,不能作为父类被继承。因此一个类不能及被声明为abstract,又被声明为final的。

2、将变量或方法声明为final,可以保证他们使用中不被改变。被声明为final的变量必须在声明时给定初值,而以后的引用中只能读取,不可修改,被声明为final的方法也同样只能使用,不能重载。

final简单的示例代码

public class Final01 {
    public static void main(String[] args) {
        E e = new E();
        //e.TAX_RATE = 0.09;
    }
}
 
//如果我们要求A类不能被其他类继承
//可以使用final修饰 A类
final class A { }
 
//class B extends A {}
 
class C {
    //如果我们要求hi不能被子类重写
    //可以使用final修饰 hi方法
    public final void hi() {}
}
class D extends C {
//    @Override
//    public void hi() {
//        System.out.println("重写了C类的hi方法..");
//    }
}
 
//当不希望类的的某个属性的值被修改,可以用final修饰
class E {
    public final double TAX_RATE = 0.08;
}
 
//当不希望某个局部变量被修改,可以使用final修饰
class F {
    public void cry() {
        //这时,NUM 也称为 局部常量
        final double NUM = 0.01;
        //NUM = 0.9;
        System.out.println("NUM=" + NUM);
    }
}

二、finally:

在异常处理时提供finally块来执行清楚操作。如果抛出一个异常,那么相匹配的catch语句就会执行,然后控制就会进入finally块,如果有的话。

public static void main(String[] args) {

	System.out.println("main 代码块中的执行结果为:" + myMethod());
}

public static int myMethod() {

	int i = 0;
	int[] num = { 1, 2, 3 };

	System.out.println(num[3]);

	try {
		System.out.println("try 代码块被执行!");
		return 0;
	} catch (Exception e) {
		System.out.println("catch 代码块被执行!");
		return 0;
	} finally {
		System.out.println("finally 代码块被执行!");
	}

}

其执行结果为:

Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3
at com.test.MyTest.myMethod(MyTest.java:15)
at com.test.MyTest.main(MyTest.java:7)
可以看到结果显示 数组下标越界,没有下标为3的这个索引,我们可以看到并没有执行finally代码块中的打印语句


三、finalize:

是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除之前做必要的清理工作。这个方法是在垃圾收集器在确定了,被清理对象没有被引用的情况下调用的。

finalize是在Object类中定义的,因此,所有的类都继承了它。子类可以覆盖finalize()方法,来整理系统资源或者执行其他清理工作。