一、final关键字
- 使用final修饰类、方法、属性
- final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误
- 使用final定义的类不能有子类(String类便是使用final定义)
- final一旦修饰一个类之后,该类的所有方法默认都会加上final修饰。(不包含成员变量),被final修饰的类不能被继承
- final不能修饰抽象类和接口,因为抽象类中会有需要子类实现的抽象方法,同样接口中也会有需要实现类来实现的方法
- 使用final定义的方法不能被子类所覆写、继承
- 使用final修饰的变量就会变成常量
public final int a=100;
不能再次赋值,使用过的final不能再次修改 - 对常量进行赋值
public static final int a=100;
- 使用final的好处就是防止代码功能被重写,不对其修饰的类或者方法进行扩展,增强数据的安全性
二、 异常finally
- 只能与try/catch语句结合使用,finally语句块中的语句一定会执行。
- 使用 finally 可以维护对象的内部状态,并可以清理非内存资源。特别是在关闭数据库连接这方面,如果程序员把数据库连接的close()方法放到finally中,就会大大降低程序出错的几率。
- 异常体系中,若finally代码块中存在return语句,则try、catch语句失效。
try {
exceptionTest.age = 1;
return exceptionTest;
}catch (Exception e) {
exceptionTest.age = 2;
return exceptionTest;
}finally {
//第一种
exceptionTest = new ExceptionTest();
int age = 3;//0
return exceptionTest;
//第二种
exceptionTest = new ExceptionTest();//0
return exceptionTest;
//第三种
exceptionTest = new ExceptionTest();
exceptionTest.age = 3;//3
return exceptionTest;
//第四种:只有return语句看try
}
- 若finally无return,try、catch有return语句,则try、catch代码块先暂存代码块中的值,然后执行finally代码块,最后返回暂存值,也就是try中的值。
返回0
ExceptionTest exceptionTest = new ExceptionTest();
try {
return exceptionTest;
}catch (Exception e) {
exceptionTest.age = 2;
return exceptionTest;
}finally {
exceptionTest = new ExceptionTest();
exceptionTest.age = 3;
}
finally有return主要看finally,这个时候还要看finally中的语句;finally没有return以try为主,
三、finalize
是一个方法,属于java.lang.Object类,finalize()方法是GC (garbage collector垃圾回收)运行机制的一部分,在垃圾收集器执行删除对象的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。