面试刷题3:final finally finalize区别?

算法织梦
• 阅读 1399

面试刷题3:final finally finalize区别?

我是李福春,我在准备面试。今天我们来回答下面的面试常见问题。

final finally finalize区别?

这三个货只是单词的写法类似,实际的使用场景相差很大。

下面一一展开分析:

final

final修饰类,标识类不可被继承,一定程度保证了提供出去的类的平台安全性;

final修饰方法,标识方法不能被重写;

final修饰变量,标识变量不能被修改;
在并发场景下可以带来性能提升,因为可以较少额外的同步开销和防御性复制;

但是final不等同于Immutable;

如何实现一个Immutable类:
1.类使用final修饰;
2.成员变量都是private final;
3.构造方法使用深度copy方法赋值;
4.getter方法使用copy-on-write的方式赋值;

看下面的代码,可以看到final和Immutable的区别;


//final只保证strlist无法再被赋值,但是可以添加,删除元素等操作
 final List<String> strList = new ArrayList<>();
 strList.add("Hello");
 strList.add("world");  
//不变的集合中添加元素会报错
 List<String> unmodifiableStrList = List.of("hello", "world");
 unmodifiableStrList.add("again");

finally

保证重点代码一定会被执行的机制;

一般跟try-finally,try-catch-finally配套使用;

看下面的代码,这是一个特例,finally里面的语句不会被执行;

try {
 // do something
 System.exit(1);
} finally{
 System.out.println(“Print from finally”);
}

finalize

是Object类的一个方法,保证类在垃圾回收之前完成对特定资源的回收。

这货很不靠谱,不建议被使用。(不可靠,使用不当容易引起程序死锁,挂起)

替代方法有3种:

  1. cleaner替代;
  2. finally进行显示的资源回收;
  3. 池技术实现资源的复用;

下面的代码是一个使用Cleaner的例子:jdbc的资源回收用到了Cleaner,是利用幻想引用定制资源回收;


public class CleaningExample implements AutoCloseable {
        // A cleaner, preferably one shared within a library
        private static final Cleaner cleaner = <cleaner>;
        static class State implements Runnable { 
            State(...) {
                // initialize State needed for cleaning action
            }
            public void run() {
                // cleanup action accessing State, executed at most once
            }
        }
        private final State;
        private final Cleaner.Cleanable cleanable
        public CleaningExample() {
            this.state = new State(...);
            this.cleanable = cleaner.register(this, state);
        }
        public void close() {
            cleanable.clean();
        }
    }

小结

主要分别讲了 final,finally,finalize的使用场景,各自无关联;
面试刷题3:final finally finalize区别?

原创不易,转载请注明出处,欢迎沟通交流。
点赞
收藏
评论区
推荐文章
2022年最新iOS面试题(附答案)
最近大家都要准备去面试或者已经在面试的,这里我给大家准备了挺多资料,可以私信我拿,看看了解下。底下就是我整理出来的一些面试题iOS类(class)和结构体(struct)有什么区别?Swift中,类是引用类型,结构体是值类型。值类型在传递和赋值时将进行复制,而引用类型则只会使用引用对象的一个"指向"。所以他们两者之间的区别就是两个类型的区别。举个简单的
Wesley13 Wesley13
3年前
java核心技术36讲笔记
JavaBasic谈谈final、finally、finalize有什么不同?典型回答:final可以用来修饰类、方法、变量,分别有不同的意义,final修饰的class代表不可以继承扩展,final的变量是不可以修改的,而final的方法也是不可以重写的(override)。finally则是
Wesley13 Wesley13
3年前
AI面试刷题版
(1)代码题(leetcode类型),主要考察数据结构和基础算法,以及代码基本功虽然这部分跟机器学习,深度学习关系不大,但也是面试的重中之重。基本每家公司的面试都问了大量的算法题和代码题,即使是商汤、face这样的深度学习公司,考察这部分的时间也占到了我很多轮面试的60%甚至70%以上。我去face面试的时候,面试官是residualnet,s
Stella981 Stella981
3年前
2021金三银四想进字节大厂必看:LeetCode算法收割机+算法刷题宝典
最近有看到很多朋友想进大厂,四面竟然都考了算法,很多同学面对算法的问题都很头大,因为自己做项目很难用到,但是但凡高薪的职位面试都会问到。最近我整理了一份刷题宝典,这份刷题宝典,也让我进了心仪的大厂。今天给大家分享一下:!(https://static001.geekbang.org/infoq/07/074b4c3d563eca9e7f73a
Wesley13 Wesley13
3年前
Java 面试题目最全集合1000+ 大放送,能答对70%就去BATJTMD试试~
2019,相对往年我们会发现今年猎头电话少了,大部分企业年终奖缩水,加薪幅度也不如往年,选择好offer就要趁早,现在开始准备吧,刷一波Java面试题,能回答70%就去BATJTMD大胆试试~以下是2018年发布过的Java面试真题、BATJ等各大互联网公司的面试真经,为方便大家查看,特意做了个导航集合,文末送面试礼包。一、面试真题
可莉 可莉
3年前
2021金三银四想进字节大厂必看:LeetCode算法收割机+算法刷题宝典
最近有看到很多朋友想进大厂,四面竟然都考了算法,很多同学面对算法的问题都很头大,因为自己做项目很难用到,但是但凡高薪的职位面试都会问到。最近我整理了一份刷题宝典,这份刷题宝典,也让我进了心仪的大厂。今天给大家分享一下:!(https://static001.geekbang.org/infoq/07/074b4c3d563eca9e7f73a
Wesley13 Wesley13
3年前
Java后端面经汇总:京东+猫眼+有赞+贝壳+GrowingIO+美团+老虎
为了这次面试也是准备了很长时间,offer没挂的都拿到了,不过我不是刷offer,被春招1offer吓怕了,海投的。各位想要看我为了准备面试的复习大纲可以在文末看到哦!~京东一面:1.自我介绍2.讲一下项目3.面向对象的特征,详细解释一下4.接口和抽象类区别,怎么选用5.线程池的参数6.HashMap,
Stella981 Stella981
3年前
63道java面试真题击破BAT招聘套路!跳槽季助你一臂之力
“金三银四”跳槽季,网上出现了各种面试真题,一时会让人眼花缭乱,分不清最该看哪个,小编耗时一星期为大家做了一些java面试的真题。请准备好你的小本本!(https://oscimg.oschina.net/oscnet/e028742d50d457dbf9e0bc1f0f8ef84bab0.jpg)✍面向对象和面向过程的区别·面向过程
Wesley13 Wesley13
3年前
Java面试,如何在短时间内做突击
面试前很有必要针对性的多刷题,大部分童鞋实战能力强,理论不行,面试前不做准备很吃亏。这里整理了很多常考面试题,希望对你有帮助。面试技术文Java岗面试考点精讲(基础篇01期)(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fmp.weixin.qq.com%2Fs
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(