final、finally、finalize 的区别
- final 关键字:用于修饰类、方法、变量、入参和对象
-
-
- 应用于类时,表示该类是最终类,不能被其他类继承。
- 应用于方法时,表示该方法是最终方法,不能被子类重写。
- 应用于变量时,表示该变量是一个常量,只能赋值一次。
- 应用于入参时,表示该入参在方法内无法被修改。
- 应用于对象时,该对象的引用不能被修改,但对象本身的状态是可变的。
- finally 关键字:异常处理机制中的一部分,用于定义在 try-catch-finally 块中的 finally 块
-
-
- 不论是否发生异常,finally 块中的代码都会执行。
- 主要用于释放资源、关闭连接等必须确保执行的操作。
- finalize 方法:是一个对象的方法,定义在 Object 类中
-
-
- 在垃圾回收器将对象回收之前调用。
- 可以重写 finalize 方法,在其中编写对象在被回收前需要进行的清理操作,如释放资源等。
- 请注意,不推荐使用 finalize 方法进行内存资源的释放,因为它没有被及时执行的保证,也可能导致性能问题
import org.junit.Test;
/**
* @author 百里
*/
public final class BaiLiTest {
final int a = 0; //final修饰变量
/**
* finally 与try-catch配合使用
* final 修饰入参
* @param num1
* @param num2
*/
public void dividEnumbers(int num1, final int num2) {
try {
int result = num1 / num2;
System.out.println("Result: " + result);
} catch (ArithmeticException e) {
System.out.println("Divide by zero exception!");
} finally {
System.out.println("Finally block executed.");
}
}
/**
* finally测试方法
* 利用final修饰的变量
*/
public void finallyTest() {
//a = 1; //无法重新赋值,会提示异常。
divideNumbers(10, a);
System.out.println("-----可以进行修改数据------------------------");
divideNumbers(10, a + 1);
}
@Override
protected void finalize() throws Throwable {
//TODO:释放资源,等其他操作
super.finalize();
System.out.println("调用finalize方法在执行垃圾回收");
}
/**
* finalize用法
*/
public void finalizedTest() {
BaiLiTest baiLiTest = new BaiLiTest();
baiLiTest = null;
System.gc();
}
}
//final修饰的类无法被子类继承
// public class BaiLiTest2 extends BaiLiTest {
// }