首页 > 其他分享 >吊打面试官系列:final、finally、finalize 有什么区别?

吊打面试官系列:final、finally、finalize 有什么区别?

时间:2023-04-28 10:32:43浏览次数:31  
标签:面试官 finalize 对象 吊打 finally 修饰 方法 final


关注“Java后端技术全栈”

回复“000”获取大量电子书

final、finally、finalize 有什么区别?

这是一个初级面试题,在中高级面试中也会出现。

final关键字

初级回答

final ,是修饰符关键字。

  • 修饰类,表示该类不能在被继承。
  • 修饰方法,表示该方法不能被子类重写。
  • 修饰变量,表示该变量是常量,不能被修改。

中高级回答

  • 如果一个类被声明为 final ,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract 的,又被声明为 final 的。
  • 将变量或方法声明为 final ,可以保证它们在使用中不被改变。被声明为 final 的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为 final 的方法也同样只能使用,不能重写。

另外,在早期的 Java 实现版本中,会将 final 方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的 Java 版本已经不需要使用 final 方法进行这些优化了)。类中所有的private 方法都隐式地指定为 final

String 、Integer、Long等类都是final修饰的类。其保存值的属性也是final修饰的。

final修饰基本数据类型和修饰引用数据类型。

如果final修饰的是一个基本数据类型的数据,一旦赋值后就不能再次更改 ,而对于引用类型变量而言,它仅仅保存的是一个引用,final只保证这个引用类型变量所引用的地址不会发生改变,即一直引用这个对象,但这个对象属性是可以改变的。

finally关键字

初级回答

通常放在try…catch…的后面构造总是执行代码块,这就意味着程序无论正常执行还是发生异常,可以将释放外部资源的代码写在finally块中。

使用方式:

try{
 //业务代码
}catch(){
//异常处理
}finally{
//释放资源等
}

try{
 //业务代码
}finally{
//释放资源等
}

高级回答

在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

通常在处理一些资源的时候,会使用finally来关闭相关资源。比如说:操作文件,使用ReentrantLock锁,分布式锁等。

在以下 4 种特殊情况下,finally块不会被执行:

  • finally 语句块中发生了异常。
  • 在前面的代码中用了 System.exit() 退出程序。
  • 程序所在的线程死亡。
  • 关闭 CPU 。

finalize方法

finalize ,是方法名。

初中级级回答

Object类中定义的方法,Java中允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的,通过重写finalize()方法可以整理系统资源或者执行其他清理工作。

听到这里就知道这面试题答案是背的

高级回答

Java 允许使用 #finalize() 方法,在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。

  • 它是在 Object 类中定义的,因此所有的类都继承了它。
  • 子类覆盖 finalize() 方法,以整理系统资源或者执行其他清理工作。
  • #finalize() 方法,是在垃圾收集器删除对象之前对这个对象调用的。

这个方法在工作中最好别用,如果用了可能会带来意想不到的难题,一般情况下,我们在业务中不会自己实现这个方法 。

大致过程:

  • 垃圾回收器发现该对象实现了finalize()方法。因为会把它添加到java.lang.ref.Finalizer.ReferenceQueue队列中。
  • Finalizer线程会处理这个队列,将里面的对象逐个弹出,并调用它们的finalize()方法。
  • finalize()方法调用完后,Finalizer线程会将引用从Finalizer类中去掉,因此在下一轮GC中,这些对象就可以被回收了。
  • Finalizer线程会和我们的主线程进行竞争,不过由于它的优先级较低,获取到的CPU时间较少,因此它永远也赶不上主线程的步伐。
  • 程序消耗了所有的可用资源,最后抛出OutOfMemoryError异常。

吊打面试官系列:final、finally、finalize 有什么区别?_java

标签:面试官,finalize,对象,吊打,finally,修饰,方法,final
From: https://blog.51cto.com/u_11702014/6233420

相关文章

  • 面试官:抽象类和接口有什么区别?
    关注“Java后端技术全栈”回复“000”获取大量电子书抽象类和接口有什么区别?这是一道初中级面试中频率相当高的,下面我们就来看看如何应答。初级回答实现:抽象类的子类使用extends来继承;接口必须使用implements来实现接口。构造函数:抽象类可以有构造函数;接口不能有。实现数量:类可......
  • 面试官:说说你对Java异常的理解
    关注“Java后端技术全栈”回复“000”获取大量电子书背景不管是工作中还是面试中,异常这一块还是非常重要的。作为Java开发人员来说,学会如何处理异常,哪些异常必须自己处理,哪些异常可以往外抛等等,这些都是必需品。生活总有你意想不到的惊喜和意外,我们的code也是一样。异常不懂,佛祖也......
  • 面试官:什么是内部类?|这么回答就妥妥的
    关注“Java后端技术全栈”回复“000”获取大量电子书本文内容什么是内部类?我们将一个类A定义在另外一个类B中,那么这个类A就叫内部类。为什么需要内部类呢?有三点原因:内部类方法可以访问该类定义的所在的作用域中的数据,包括私有的数据。内部类可以对同一个包中的其他类隐藏起来。当想......
  • 面试官:说说你对序列化的理解
    关注“Java后端技术全栈”回复“000”获取大量电子书本文主要内容背景在Java语言中,程序运行的时候,会产生很多对象,而对象信息也只是在程序运行的时候才在内存中保持其状态,一旦程序停止,内存释放,对象也就不存在了。怎么能让对象永久的保存下来呢?--------对象序列化。何为序列化和反序......
  • 面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?
    认识基本数据类型在学习基本数据类型之前,我们先认识一下这两个单词:1、bit--位:位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为“0”或“1”。2、byte--字节:字节是计算机存储容量的基本单位,一个字节由8位二进制数组成。在计算机内部,一个字节可以表示一个数据,也可以表......
  • 面试官:Java装箱与拆箱的区别?
    关注“Java后端技术全栈”回复“000”获取大量电子书认识装箱和拆箱装箱就是自动将基本数据类型转换为包装器类型(int-->Integer);调用方法:Integer的valueOf(int)方法。拆箱就是自动将包装器类型转换为基本数据类型(Integer-->int);调用方法:Integer的intValue方法。在JavaSE5之前,如果要......
  • 别再双塔了!谷歌提出DSI索引,检索效果吊打双塔,零样本超BM25!
    卖萌屋今日学术精选这篇论文展示了信息检索可以用一个Transformer来完成,其中,关于语料库的所有信息都被编码在Transformer模型的参数中。论文标题:TransformerMemoryasaDifferentiableSearchIndex链接:https://arxiv.org/abs/2202.06991作者提出了可微搜索索引(DifferentiableSe......
  • 同步异步多线程这三者关系,你能给面试官一个满意的回答吗?
    前几天一位朋友去面试,面试官问了他同步,异步,多线程之间是什么关系,异步比同步高效在哪?多线程比单线程高效在哪?由于回答的不好,让我帮他捋一下,其实回答这个问题不难,难就难在只对别人说理论,而没有现杀的例子。一:异步1.到底解放了谁?<1>从基础的同步说起要说解放了谁,一定得有几......
  • 面试官的灵魂一击: MySQL 事务日志是什么?
    SQL(StructuredQueryLanguage)和NoSQL(NotOnlySQL)是两种不同类型的数据库系统。SQL数据库系统采用了关系模型来存储数据,通过使用SQL语言进行数据管理和查询。SQL数据库系统适用于大规模、复杂的数据和事务处理,并且具有数据一致性和完整性的特点。常见的SQL数据库系统包括MySQL、Or......
  • 面试官:你有什么想问我的?我:什么都问吗?
    本文首发自公粽hao「林行学长」,欢迎来撩,免费领取20个求职工具资源包。了解校招、分享校招知识的学长来了!想必经历过面试的同学都会被面试官问一个问题:“你还有什么想问我的吗?”很多同学第一次被问到这个问题的时候,常常会陷入短暂的沉默。脑海里是哲学三问:我是谁……我在哪......我......