final 有哪些用法?

2023-11-09

final 有哪些用法?

final 是很多面试官喜欢问的问题,但这个问题其实很无聊,通常能回答以下5点就很不错了:

  • 被 final 修饰的类不可以被继承;
  • 被 final 修饰的方法不可以被重写;
  • 被 final 修饰的变量不可以被改变,如果是修饰引用,那么表示引用不可变,引用指向的内容可变
  • 被 final 修饰的方法,JVM 会尝试将其内联,以提高运行效率;
  • 被 final 修饰的常量,再编译阶段会存入常量池中。

除此之外,编译器对 final 域要遵守的两个重排序规则做了如下规定:

  1. 在构造函数内对一个 final 域的写入,与随后把这个构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序;
  2. 初次读一个包含 final 域的对象的引用,与随后初次读这个 final 域,这两个操作之间不能重排序。

如果你对上述的重排序规则不了解,那么建议你去读以下《Java并发编程的艺术》,这本书对 final 关键字的重排序规则描述的很详细,后面我也会单独写一篇文章来介绍 final 的重排序规则。


此外,如果你还能回答出下面两点,那说明你的 Java 基础是比较牢固的:

  1. final 修饰成员变量,该成员变量必须在创建对象之前进行赋值,否则编译失败。因为被 final 修饰的值是不可变的,而如果没有在对象被创建之前赋初始值,那么这个成员变量的的值将一直是系统默认分配的 0、‘\u0000’、false 或者 null,这样没有意义,因此 Java 从语法层面就规定 final 修饰的成员变量必须指定初始值
  2. 成员变量的赋值有三种实现方式:
    a. 定义成员变量的时候手动赋值
    b. 利用构造器对成员变量进行赋值

如果你对Java的对象实例化过程不了解,那么你可以参考我下面的流程图:

对象实例化过程

这是完整的流程图,更详细的描述可以看我语雀笔记:Java 对象实例化过程
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

final 有哪些用法? 的相关文章

  • 如何在 Eclipse 中用阿拉伯语读写

    我在 eclipse 中编写了这段代码来获取一些阿拉伯语单词 然后打印它们 public class getString public static void main String args throws Exception PrintS
  • 检查双精度值的等于和不等于条件

    我在比较两者时遇到困难double values using and 我创建了 6 个双变量并尝试进行比较If健康 状况 double a b c d e f if a b c d e f My code here in case of t
  • 将链接对象转换为流或集合

    我想迭代堆栈跟踪 堆栈跟踪由可抛出对象组成 其 getCause 返回下一个可抛出对象 最后一次调用 getCause 返回 null 示例 a gt b gt null 我尝试使用 Stream iterable 这会导致 NullPoi
  • Java 创建浮雕(红/蓝图像)

    我正在编写一个 Java 游戏引擎 http victoryengine org http victoryengine org 并且我一直在尝试生成具有深度的 3D 图像 您可以使用那些红色 蓝色眼镜看到 我正在使用 Java2D 进行图形
  • 如何从另一个xml文件动态更新xml文件?

    我想从另一个 xml 文件更新 xml 文件 我使用了一个 xml 文件 如下所示 one xml
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • Java 泛型/类型调度问题

    考虑以下程序 import java util List import java util ArrayList public class TypeTest public static class TypeTestA extends Type
  • 如何解决 onEditCommit 事件上的类型不匹配错误?

    我在 Fxml 中使用 onEditCommit 事件在用户编辑数据后检索数据 FXML 代码
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • 使用 java 按电子邮件发送日历邀请

    我正在尝试使用 java 发送每封电子邮件的日历邀请 收件人收到电子邮件 但不会显示接受或拒绝的邀请 而是将该事件自动添加到他的日历中 我正在使用 ical4j jar 构建活动 邀请 private Calendar getInvite
  • 想要开发像 Facebook 这样的网站 - 处理数百万个请求 - 高性能 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想用 Java 开发一个像 Fac
  • 打印包含 JBIG2 图像的 PDF

    请推荐一些库 帮助我打印包含 JBIG2 编码图像的 PDF 文件 PDFRenderer PDFBox别帮我 这些库可以打印简单的 PDF 但不能打印包含 JBIG2 图像的 PDF PDFRenderer尝试修复它 根据 PDFRedn
  • 为什么 ConcurrentHashMap::putIfAbsent 比 ConcurrentHashMap::computeIfAbsent 更快?

    使用 ConcurrentHashMap 我发现computeIfAbsent 比putIfAbsent 慢两倍 这是简单的测试 import java util ArrayList import java util List import
  • tomcat 过滤所有 web 应用程序

    问题 我想对所有网络应用程序进行过滤 我创建了一个过滤器来监视对 apache tomcat 服务器的请求 举例来说 它称为 MyFilter 我在 netbeans 中创建了它 它创建了 2 个独立的目录 webpages contain
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • Path2D 上的鼠标指针检测

    我构建了一个Path2D http docs oracle com javase 7 docs api java awt geom Path2D html表示由直线组成的未闭合形状 我希望能够检测何时单击鼠标并且鼠标指针靠近路径 在几个像素
  • 为什么 BufferedWriter 不写入文件?

    我有这个代码 String strings Hi You He They Tetrabenzene Caaorine Calorine File file new File G words txt FileWriter fWriter Bu

随机推荐

  • 机器学习:过拟合

    过拟合 通俗来讲过拟合就是 选用的模型过于复杂 d v c d vc dvc 过大 模型在训练集上有很好的表现 但是在真实预测过程中的表现和训练集上的差别过大 也就是没有做到机器学习的两个核心要打求之一的
  • 大型网站WEB服务器技术选型参考

    大型网站WEB服务器技术选型参考 网站 操作系统 WEB服务器 Google Linux Google Web Server Microsoft Windows 2003 IIS 6 0 Ebay com Windows 2000 2003
  • ctfshow_web9 【MD5加密漏洞绕过sqli】

    WEB ctfshow web9 MD5加密漏洞绕过sqli 打开题目是一个登录框 用户名处预先输入了admin 试了各种sql注入的姿势 都不好使 对网址进行扫描 找到了robots txt 访问它得到以下提示 访问index phps
  • 【满分】【华为OD机试真题2023 JAVA&JS】获得完美走位

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 获得完美走位 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 在第一人称射击游戏中 玩家通过键盘的A S D W四个按键控制游戏人物分别向左 向后 向右 向前进行
  • 穿山甲报错 splashAdLoadFail data analysis error

    使用swift接入穿山甲 未接入GroMore 这个时候如果代码位配置错误会导致如下错误 splashAdLoadFail error Optional Error Domain com buadsdk Code 98764 data an
  • Linux终端显示工作路径

    在当前终端中使用 export PS1 u h w 如果需要持续使用 代码如下 sudo i 切换为root用户 echo export PS1 u h w gt gt etc profile
  • Python爬虫常用哪些库?

    经常游弋在互联网爬虫行业的程序员来说 如何快速的实现程序自动化 高效化都是自身技术的一种沉淀的结果 那么使用Python爬虫都会需要那些数据库支持 下文就是有关于我经常使用的库的一些见解 请求库 1 urllib urllib库是Pytho
  • 线程池的简介说明

    转自 线程池的简介说明 在多线程应用程序开发中 如果我们不使用线程池 则每次创建和销毁线程将会消耗宝贵的CPU 内存资源 所以我们必须创建一个线程池 线程池的功能 线程池用于管理线程 用于减少系统资源消耗 创建一个线程池 实现思路 借助线程
  • 【云原生】我将ChatGPT变成Kubernetes 和Helm 终端

    kubectl get po deploy svc kubectl run image nginx nginx app port 80 env DOMAIN cluster kubectl expose deployment nginx a
  • Java代码中如何中断线程呢?

    转自 http www java265 com JavaCourse 202204 3189 html 下文笔者讲述使用Java代码中断线程的方法分享 如下所示 实现思路 使用interrupt 方法进行线程中断 在中断前 我们可使用isI
  • python-6-for循环及格式化输出format三种用法

    前言 循环我们前面讲过了无限循环 那么for循环属于什么循环呢 显然就是有限循环 另外格式化输出我们前面也讲过 但是format也能做到不一样的格式化输出 一起看看吧 一 for 循环 1 for 有限循环 for 有限循环 s 123as
  • 操作系统:首次适应算法和最佳适应算法(c语言实现)

    1 要求 用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc 和回收过程free 其中 空闲分区通过空闲分区链来管理 在进行内存分配时 系统优先使用空闲区低端的空间 假设初始状态下 可用的内存空间为640KB 并有下
  • ArchLinux的安装和配置

    文章目录 安装ArchLinux 分区 更换镜像源 下载arch软件 进入新系统 安装系统引导工具 为root设置密码 解除U盘挂载 重启虚拟机 配置ArchLinux 配置语言区域 配置时区 设置主机名 中文本地化配置 提前准备 虚拟机软
  • python单元测试框架(测试固件、批量执行)

    python测试框架 在Python语言中应用最广泛的单元测试框架是unittest和pytest unittest属于标准库 只要安装了Python解释器后就可以直接导入使用了 pytest是第三方的库 需要单独的安装 1 白盒测试原理
  • MySQL 低版本 解决row_number()over()无法使用的方法

    MySQL8以上版本支持了很多的窗口函数 但是低版本的可能也需要用到row number over select a u name a class a score if class null or class a class rownum
  • 插入数据返回插入的主键Id

    ADO Net中Sql语句 insert into RoomType TypeName Price AddBed BedPrice Remark output inserted ID values kkk 321 1 34 oooo EF中
  • 错误:找不到或无法加载主类com.itheima.SpringBootStarterAutoconfigureApplication的完美解决方法

    首先这种情况是我们导入的配置类没有加载进来 也就是没在本地库里面 出现的原因是 一方面是我们在Maven的时候点了clean 就直接运行了 此时本地库是啥都没有 在这里插入图片描述 https img blog csdnimg cn 0cf
  • [OpenGL]射线拾取RayPicking---(1)生成射线

    Vries的教程是我看过的最好的可编程管线OpenGL教程 没有之一 但没有讲关于拾取 Picking 的章节 而这个功能的确很重要 就自己试着写写看了 这节有三个很重要的参考网址 基本可以算照抄了 1 https blog csdn ne
  • Grafana自定义变量使用笔记

    简介 随便记录一下 为什么要使用自定义参数 用这个有啥好处 我们在使用Grafana来配置看板时经常遇到一个指标有多台主机需要添加监控 这就让添加过程重复做 而且当我们添加新的node时还要来添加监控项目 烦死了 有没有好的方法能自动遍历呢
  • final 有哪些用法?

    final 有哪些用法 final 是很多面试官喜欢问的问题 但这个问题其实很无聊 通常能回答以下5点就很不错了 被 final 修饰的类不可以被继承 被 final 修饰的方法不可以被重写 被 final 修饰的变量不可以被改变 如果是修