Java中final为修饰词,用于修饰类、变量和方法。被final修饰的类不能再有派生类。被final修饰的变量是不可变的。被final修饰的方法不能重写。
Java中的finalize()是java垃圾回收机制回收对象前调用的最后一个函数。可以重写finalize()方法从而实现对资源的回收。通常是在这个方法中需要释放这个对象所申请的其他系统资源。finalize()类似于c++中的析构函数。C++中,在构造函数中我们获取资源,在析构函数中释放资源,释放了的资源被回收可以重新利用。比如在构造函数中打开文件,在析构函数中关闭。构造函数和析构函数操作相对应。
Java中的finally{}通常是和try{} catch{} 一起使用,其目的是不管有没有发生异常都进行finally{}中的操作。
Java中try、catch、finally执行顺序小结:
- finally代码块比return先执行 (finally是在return后面的表达式运算后执行的,这时候没有返回运算的值而是先把要返回的值保存起来,无论finlly中的代码怎么样,返回的值不会改变,故函数返回值是在finally执行前确定的)。
package com.gary.testfinally;
public class TestForFinally {
public int add(int a, int b) {
try {
return a + b;
} catch (Exception e) {
System.out.println("catch语句块");
} finally {
a++;
System.out.println("finally语句块");
}
return 0;
}
public static void main(String[] args) {
TestForFinally test = new TestForFinally();
System.out.println("和是:" + test.add(9, 34));
}
}
finally语句块
和是:43
- 多个return是按顺序执行的,多个return执行了一个后,后面的return就不会执行了。
package com.gary.testfinally;
public class TestForFinally2 {
public int add(int a, int b) {
try {
return a + b;
} catch (Exception e) {
return b;
} finally {
return a;
}
}
public static void main(String[] args) {
TestForFinally2 test = new TestForFinally2();
System.out.println("和是:" + test.add(9, 34));
}
}
和是:9