一、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()方法,来整理系统资源或者执行其他清理工作。