news 2026/7/2 18:52:04

Java核心考点:final/finally/finalize与对象4种引用全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java核心考点:final/finally/finalize与对象4种引用全解析

Java核心考点:final/finally/finalize与对象4种引用全解析

    • 前言
    • 一、核心区分:final、finally、finalize 三者详解
      • 1.1 final(关键字:表示不可变)
      • 1.2 finally(异常处理:必须执行)
      • 1.3 finalize(Object方法:GC回收前调用)
      • 1.4 三者核心对比表
    • 二、Java对象的四种引用(强、软、弱、虚)
      • 2.1 强引用(Strong Reference)永不回收
      • 2.2 软引用(Soft Reference)内存不足才回收
      • 2.3 弱引用(Weak Reference)下次GC必回收
      • 2.4 虚引用(Phantom Reference)随时回收,等于无
    • 三、四种引用回收时机流程图
    • 四、高频面试题标准答案(直接背诵)
      • 4.1 final、finally、finalize 区别?
      • 4.2 四种引用有哪些?
      • 4.3 ThreadLocal 为什么使用弱引用?
    • 结束语

🌺The Begin🌺点点关注,收藏不迷路🌺

⬇ ⬇ 底部 ⬇ ⬇

前言

在Java面试与核心基础知识点中,final、finally、finalize的区别与对象四种引用(强软弱虚)是高频必考题,同时也是理解Java内存管理、异常处理、ThreadLocal原理的关键内容。

本文将用清晰定义、核心用法、代码示例、流程图、对比总结全方位讲解,帮你一次性吃透所有考点,轻松应对面试与开发!


一、核心区分:final、finally、finalize 三者详解

1.1 final(关键字:表示不可变)

final 是Java关键字,用于限制不可变、不可继承、不可重写

  1. 修饰类:类不能被继承(如String、Integer)
  2. 修饰方法:方法不能被子类重写
  3. 修饰变量:变量变成常量,只能赋值一次
// 修饰类finalclassDemo{}// 修饰方法publicfinalvoidtest(){}// 修饰变量finalinta=10;

1.2 finally(异常处理:必须执行)

finally 是 try-catch 语句块,无论是否异常都会执行

核心用途:

  • 关闭IO流
  • 关闭数据库连接
  • 释放锁资源
try{// 业务代码}catch(Exceptione){// 异常处理}finally{// 必须执行:关闭资源}

1.3 finalize(Object方法:GC回收前调用)

finalize 是Object类的方法,由垃圾回收器GC调用

作用:对象被回收前做资源释放,已被废弃,不推荐使用

@Overrideprotectedvoidfinalize()throwsThrowable{// 回收前操作}

1.4 三者核心对比表

关键字类型作用使用场景
final关键字不可变、不可继承、不可重写定义常量、工具类
finally代码块异常处理必须执行关闭资源
finalize方法GC回收前调用已废弃

二、Java对象的四种引用(强、软、弱、虚)

2.1 强引用(Strong Reference)永不回收

最常用,只要引用存在,GC绝不回收对象

Objectobj=newObject();// 强引用

特点:

  • 内存不足也不会回收
  • JVM宁愿抛出OOM也不回收强引用对象

2.2 软引用(Soft Reference)内存不足才回收

内存溢出OOM前才会被回收,适合做缓存

Objectobj=newObject();SoftReference<Object>sf=newSoftReference<>(obj);obj=null;sf.get();// 内存足够时返回对象,不足时返回null

使用场景:

  • 图片缓存
  • 网页缓存
  • 不需要常驻内存的数据

2.3 弱引用(Weak Reference)下次GC必回收

只要GC触发,就会被回收,生命周期短

Objectobj=newObject();WeakReference<Object>wf=newWeakReference<>(obj);obj=null;wf.get();// GC前有值,GC后为null

核心重点:ThreadLocal底层key就是弱引用!

staticclassEntryextendsWeakReference<ThreadLocal<?>>{Objectvalue;Entry(ThreadLocal<?>k,Objectv){super(k);value=v;}}

2.4 虚引用(Phantom Reference)随时回收,等于无

get()永远返回null,仅用于监听对象回收

必须配合引用队列ReferenceQueue使用。

ReferenceQueuequeue=newReferenceQueue();PhantomReference<Object>pf=newPhantomReference<>(obj,queue);

作用:

  • 监听对象被GC回收的时机
  • 管理堆外内存

三、四种引用回收时机流程图

创建对象

强引用:永不回收

软引用:内存不足才回收

弱引用:GC立即回收

虚引用:随时回收,get()=null


四、高频面试题标准答案(直接背诵)

4.1 final、finally、finalize 区别?

  1. final是关键字,用于不可变;
  2. finally用于异常处理,必须执行;
  3. finalize是Object方法,GC回收前调用。

4.2 四种引用有哪些?

强引用、软引用、弱引用、虚引用。

4.3 ThreadLocal 为什么使用弱引用?

为了避免内存泄漏,ThreadLocalMap的key使用弱引用,当ThreadLocal对象变为null时,key会被GC自动回收。


结束语

final/finally/finalize 与四种引用是Java基础、面试、JVM内存管理的核心知识点,理解它们能大幅提升代码健壮性与面试通过率。建议收藏本文,随时复习!


🌺The End🌺点点关注,收藏不迷路🌺

⬆ ⬆ 顶部 ⬆ ⬆
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 18:51:55

Anthropic新架构:认知链路压缩为原子操作

1. 项目概述&#xff1a;这不是一次普通更新&#xff0c;而是模型能力边界的实质性坍缩“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题乍看像一句技术圈内部的黑色幽默&#xff0c;但实测下来&#xff0c;它精准描述了一个正在发生的、肉眼可…

作者头像 李华
网站建设 2026/7/2 18:46:43

AI数学家:数学实践范式的迁移与可验证工作流

1. 这不是“AI做题”&#xff0c;而是数学实践范式的迁移“AI Mathematicians: How LLMs Are Redefining Mathematics”——这个标题里藏着一个被多数人误读的真相&#xff1a;它说的不是“让大模型解微积分题”&#xff0c;也不是“用ChatGPT写证明草稿”&#xff0c;而是一场…

作者头像 李华
网站建设 2026/7/2 18:46:32

【CSDN首发】PTC加热器医疗应用技术指南:原理、选型与工程实践

导读本文面向医疗设备工程师、嵌入式开发者及供应链管理人员&#xff0c;系统讲解PTC加热器在血液透析、呼吸支持、体外诊断等医疗设备中的应用原理与选型要点。全文约3500字&#xff0c;含8个实用FAQ&#xff0c;适合收藏备查。1. PTC热敏电阻技术原理1.1 半导体陶瓷热敏机理P…

作者头像 李华
网站建设 2026/7/2 18:45:55

Semantic Kernel+Neo4j轻量级知识问答系统实战

1. 项目概述&#xff1a;为什么一个轻量级知识问答系统值得花三天时间搭出来我最近在给一家做工业设备维保的客户做技术咨询&#xff0c;他们手上有几百份PDF格式的设备手册、故障代码表和维修日志&#xff0c;但工程师查个“PLC模块报E207错误怎么处理”&#xff0c;得先打开W…

作者头像 李华
网站建设 2026/7/2 18:45:49

VS Code通过SSH远程开发Ubuntu虚拟机实战指南

1. 项目概述&#xff1a;为什么要在 VS Code 里用 SSH 连 Ubuntu 虚拟机&#xff1f;我第一次在 Windows 10 上配通 VS Code SSH VMware 虚拟机里的 Ubuntu&#xff0c;是在调试一个 Python 数据处理脚本时被逼出来的。当时的情况是&#xff1a;代码逻辑必须跑在 Ubuntu 环境…

作者头像 李华