final作为Java中的关键字可以用于三个地方。用于修饰类、类属性和类方法。

特征:凡是引用final关键字的地方皆不可修改!

(1)修饰类:表示该类不能被继承;

(2)修饰方法:表示方法不能被重写;

(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

相信大家都具备基本的常识: 被final修饰的变量是不能够被改变的. 但是这里的"不能够被改变"对于不同的数据类型是有不同的含义的.
当final修饰的是一个基本数据类型数据时, 这个数据的值在初始化后将不能被改变; 当final修饰的是一个引用类型数据时, 也就是修饰一个对象时, 引用在初始化后将永远指向一个内存地址, 不可修改. 但是该内存地址中保存的对象信息, 是可以进行修改的.
上一段话可能比较抽象, 希望下面的图能有助于你理解, 你会发现虽说有不同的含义, 但本质还是一样的.
首先是final修饰基本数据类型时的内存示意图

  • 如上图, 变量a在初始化后将永远指向003这块内存, 而这块内存在初始化后将永远保存数值100.
  • 下面是final修饰引用数据类型的示意图

在上图中, 变量p指向了0003这块内存, 0003内存中保存的是对象p的句柄(存放对象p数据的内存地址), 这个句柄值是不能被修改的, 也就是变量p永远指向p对象. 但是p对象的数据是可以修改的.

不难看出final修饰变量的本质: final修饰的变量会指向一块固定的内存, 这块内存中的值不能改变.
引用类型变量所指向的对象之所以可以修改, 是因为引用变量不是直接指向对象的数据, 而是指向对象的引用的. 所以被final修饰的引用类型变量将永远指向一个固定的对象, 不能被修改; 对象的数据值可以被修改.

final 在 java 中有什么作用?相关推荐

  1. Java常见面试题—final 在 java 中有什么作用?

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字. 另外,Java中的String类就是一个final类. 一.final关键字的基本用法 在Java中, ...

  2. java在ai中有什么作用_AI技术在肺小结节检查中有什么作用?准确率如何

    肺小结节是指肺部出现比较小的病灶,这些病灶可能是良性,也有可能是恶性,具体的确诊需要通过明确的检查确定.肺小结节的发病原因是多方面的,目前研究报名和吸烟.雾霾.职业因素及慢性炎症等因素有关.肺小结节的 ...

  3. java基本数据类型_Java面试题Java中有几种基本数据类型?它们分别占多大字节?...

    点击上方"千锋Java学院",选择"置顶公众号" 每天一道面试模拟真题及解析 课前导读 ●回复"每日一练"获取以前的题目,持续更新! ●我希 ...

  4. 【Java学习笔记之一】java关键字及作用

    Java关键字及其作用 一. 总览: 1 访问控制 2 private protected public 3 4 类,方法和变量修饰符 5 abstract class extends final i ...

  5. Java 中有 goto 吗?

    goto 是 Java 中的关键字, 但还处于保留状态, 在实际的开发中并不能使用. 本文列举了 Java 中的关键字以及引入时间, 同时讨论了和 goto 效果类似的 break label 的语法 ...

  6. 在Java中有类似.NET的NotImplementedException吗?

    本文翻译自:Is there anything like .NET's NotImplementedException in Java? 在Java中有类似.NET的NotImplementedExc ...

  7. final关键字---Java

    final关键字---Java final关键字的作用1.修饰变量:被他修饰的变量不可改变.一旦赋了初值,就不能被重新赋值.2.修饰方法:该方法不可被子类重写,但是可以被重载.3.修饰类:修饰的类不能 ...

  8. java关键字的作用_java关键字及其作用

    java关键字及其作用 java 关键字及其作用 一. 关键字总览:关键字 含义abstract 表明类或者成员方法具有抽象属性assert 用来进行程序调试boolean 基本数据类型之一,布尔类型 ...

  9. Java中接口作用的理解

    关于Java中接口作用的深入理解.这是个很容易遇到的问题吧,看下面红色的部分应该就能理解了.要把接口视作一种共同规范. / 2019/3/1 补充 : 接口的存在也是为了弥补类无法多继承的缺点,假设一 ...

最新文章

  1. 如何优雅地用TensorFlow预测时间序列:TFTS库详细教程
  2. 第一次来写博客,这里可以记录很多故事。
  3. 360无痕浏览器_高效使用浏览器,探索你不知道的实用功能
  4. nodejs的web开发框架了解一下
  5. web前端零基础入门学习!前端真不难!
  6. Jean Hsu:当女软件工程师的那些好处
  7. 单例(Singleton)设计模式应用场景
  8. oracle-11g-R2监听文件配置
  9. ubuntu start
  10. 谷歌发布adb-fastboot工具独立包
  11. Google官方架构MVI
  12. AlertManager实现webhook告警(使用Postman测试)
  13. AV1时域滤波相关代码
  14. 以电影之眼看CSS3动画(一)
  15. HTML:如何设置网页标题上的图标
  16. JDK中文API帮助文档【沈东良】
  17. jQuery 操作属性
  18. java二维数组添加数据_我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊...
  19. 对“动态多重网络”建模与目标选择方法的介绍
  20. Spring全家桶(九)Spring JdbcTemplate

热门文章

  1. (NO.00001)iOS游戏SpeedBoy Lite成形记(八)
  2. Typecho 新浪登陆插件 Sinauth
  3. MYSQL复制的几种模式
  4. dial up network
  5. MSN消息提示类(II)
  6. 机械零点、MAM 文件 、 EMT标定原理
  7. 计算机视觉和图形学中的摄像机内参数矩阵详解
  8. Pytorch基础(十)——优化器(SGD,Adagrad,RMSprop,Adam,LBFGS等)
  9. 关于cmake从GitHub上下载的源码启动时报错的问题
  10. 第6章 Python 数字图像处理(DIP) - 彩色图像处理2 - 灰度分层(灰度分割)和彩色编码,灰度值到彩色变换,Gray to RGB