final,finally,finalize的区别?
1.final关键字
1.1final修饰变量
如果final修饰变量上,final不能修改。
1.2 final可以修饰在属性上
如果final在属性上,直接给初始值,或在构造器中给初始值,如果存在多个构造器,则每一个构造器里面都要有final这个属性的初始化。
1.3 final修饰在方法上
final修饰在方法上不能被覆写。可以被正常调用。
1.4 final修饰在类上
如果一个类被final修饰,就不能被继承
源代码:TestFinal.java
final class Teacher{ //如果这个类被final修饰,则不能被继承,即本例第21行代码会报错
String name;
/*
final int age;//属性上用final,则直接赋初识值,或每个构造器中都要给final属性初识化
public Teacher(){ //子类构造器要调用默认构造器
this.age = 10;
}
public Teacher(String name){
this.name = name;
this.age = 10;
}
*/
public final void teach(){
System.out.println(name + "在教课");
}
}
class JavaTeacher extends Teacher{
boolean isGlass;
/*
//调用默认构造器,可隐藏
public JavaTeacher(){
super();
}
*/
/*
//会报错,final用在方法上,不能被覆写
public void teach(){
System.out.println(name + "在教课");
}
*/
}
public class TestFinal{
public static void main(String[] args){
}
}
2. finally:
finally用于异常处理,无论是否发生异常,finally后面的语句都一定执行。
3. finalize:
finalize是在Object类中定义的方法,因此,所有的类都继承了它。子类可以覆盖finalize()方法,来整理系统资源或者执行其他清理工作。
用于垃圾回收,我们不用手动的去调用,由jvm来调用。
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
什么样的对象会被回收?:匿名对象,或无主对象,没有引用即被回收。