final&finally&finalize

本文详细解析了Java中final关键字的多种用途,包括修饰类、成员方法、方法参数及成员变量的不同效果,并探讨了final与abstract之间的区别。此外,还深入介绍了finally块的执行逻辑及其与return、continue和break等语句的交互方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.final关键字可以用来修饰类,成员方法,方法的参数,成员变量(静态和非静态的)

(1).final修饰类表示类为终类,不能被继承,String就是这样的一个类.

(2).final修饰一个成员方法时,此方法在子类中不能被覆盖.

(3).final修饰成员变量,如果final修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,即是个常量;如果final修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,而所引用的对象的成员属性是可以改变的.

(4).由关键字abstract定义的抽象类含有必须由继承自它的子类实现的抽象方法,因此无法同时使用final和abstract来修饰同一个类.同样final也不能用来修饰接口,final修饰的类其成员方法都是不能够被重写的。


2.finally块,try{}块中有return,continue, break中并不会影响finally块的执行,finally块会在return之前执行.同样,finally语句块是在循环被跳过(continue)和中断(break)之前被执行.

(1).return-finally测试代码:

public class Main {

public static void main(String[] args) {

int i = 0;

try{
if(i == 0){
System.out.println("before return");
return ;
}

}catch(Exception e){
e.printStackTrace();
}finally{
System.out.println("call finally block");
}
}
}


输出:
before return
call finally block

(2).break-finally测试代码:

public class Main {

public static void main(String[] args) {


for(int i = 0; i < 2; i++){
try{
if(i == 1){
break;
}
}catch(Exception e){
e.printStackTrace();
}finally{
System.out.println("call finally block-"+i);
}
}
}
}


输出:
call finally block-0
call finally block-1


(3).continue-finally测试代码:
public class Main {

public static void main(String[] args) {


for(int i = 0; i < 2; i++){
try{
if(i == 1){
continue;
}
}catch(Exception e){
e.printStackTrace();
}finally{
System.out.println("call finally block-"+i);
}
}
}
}


输出:
call finally block-0
call finally block-1


3.finalize方法

finalize方法属于java.lang.Object类,它的定义如下:
protected void finalize()throws Throwable{}

finalize()方法是GC运行机制的一部分,finalize方法是在GC清理它所从属的对象时被调用,通常被用来释放资源,如果在执行它的过程中抛出无法捕获的异常,GC将终止对此对象的清理,并且此异常会被忽略.

程序调用System的gc()方法,引起GC的执行,GC在清理对象时会调用它的finalize()方法.

测试代码:


 
class Test{
protected void finalize()throws Throwable{
System.out.println("call finalize()");
}
}


public class Main {

public static void main(String[] args) {

Test t = new Test();
t = null;
System.gc();
}
}


输出:
call finalize()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值