本文主要介绍了final关键字的基本使用方法及原理

final关键字可以修饰类、方法和引用。

修饰类,该类不能被继承。并且这个类的对象在堆中分配内存后地址不可变。

修饰方法,方法不能被子类重写。

修饰引用,引用无法改变,对于基本类型,无法修改值,对于引用,虽然不能修改地址值,但是可以对指向对象的内部进行修改。

比如char[0] = 'a'。不改变对象内存地址,只改变了值。

具体看一下下面的栗子:

  1. final class Fi {
  2. int a;
  3. final int b = 0;
  4. Integer s;
  5. }
  6. class Si{
  7. //一般情况下final修饰的变量一定要被初始化。
  8. //只有下面这种情况例外,要求该变量必须在构造方法中被初始化。
  9. //并且不能有空参数的构造方法。
  10. //这样就可以让每个实例都有一个不同的变量,并且这个变量在每个实例中只会被初始化一次
  11. //于是这个变量在单个实例里就是常量了。
  12. final int s ;
  13. Si(int s) {
  14. this.s = s;
  15. }
  16. }
  17. class Bi {
  18. final int a = 1;
  19. final void go() {
  20. //final修饰方法无法被继承
  21. }
  22. }
  23. class Ci extends Bi {
  24. final int a = 1;
  25. //        void go() {
  26. //            //final修饰方法无法被继承
  27. //        }
  28. }
  29. final char[]a = {'a'};
  30. final int[]b = {1};

final修饰类

  1. @Test
  2. public void final修饰类() {
  3. //引用没有被final修饰,所以是可变的。
  4. //final只修饰了Fi类型,即Fi实例化的对象在堆中内存地址是不可变的。
  5. //虽然内存地址不可变,但是可以对内部的数据做改变。
  6. Fi f = new Fi();
  7. f.a = 1;
  8. System.out.println(f);
  9. f.a = 2;
  10. System.out.println(f);
  11. //改变实例中的值并不改变内存地址。
  12. Fi ff = f;
  13. //让引用指向新的Fi对象,原来的f对象由新的引用ff持有。
  14. //引用的指向改变也不会改变原来对象的地址
  15. f = new Fi();
  16. System.out.println(f);
  17. System.out.println(ff);
  18. }

final修饰方法

  1. @Test
  2. public void final修饰方法() {
  3. Bi bi = new Bi();
  4. bi.go();//该方法无法被子类Ci重写
  5. }

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

<pre>

  1. @Test
  2. public void final修饰基本类型变量和引用() {
  3. final int a = 1;
  4. final int[] b = {1};
  5. final int[] c = {1};
  6. //  b = c;报错
  7. b[0] = 1;
  8. final String aa = "a";
  9. final Fi f = new Fi();
  10. //aa = "b";报错
  11. // f = null;//报错
  12. f.a = 1;
  13. }

【Java基本功】一文读懂final关键字的用法相关推荐

  1. 【Java基本功】一文读懂final关键字的用法 1

    本文主要介绍了final关键字的基本使用方法及原理 final关键字可以修饰类.方法和引用. 修饰类,该类不能被继承.并且这个类的对象在堆中分配内存后地址不可变. 修饰方法,方法不能被子类重写. 修饰 ...

  2. 面试:一文搞懂 final 关键字的作用

    前言 Java语言支持的变量类型有: 类变量:独立于方法之外的变量,用 static 修饰. 实例变量:独立于方法之外的变量,不过没有 static 修饰. 局部变量:类的方法中的变量. 实例代码: ...

  3. 一文读懂 volatile 关键字

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:有了这 4 款工具,老板再也不怕我写烂SQL了个人原创+1博客:点击前往,查看更多 作者:对弈 来源:https ...

  4. C++ ——一文读懂:关键字override

    override在C++中它是覆盖了一个方法并且对其重写,从而达到不同的作用.在我们C++编程过程中,最熟悉的就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明 ...

  5. 【Python】一文读懂Python正则表达式常用用法

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 编辑:爱学AI 来源:geekvi   链接: www.segmentfault.co ...

  6. 一文读懂Java中File类、字节流、字符流、转换流

    一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...

  7. JVM(一)一文读懂Java编译全过程

    一文读懂Java编译全过程 java代码首先要通过前端编译器编译成.class字节码文件,然后再按一定的规则加载到JVM(java 虚拟机)内运行,有三种运行方式,解释模式(javac).编译模式(C ...

  8. java中date类型如何赋值_一文读懂java中的Reference和引用类型

    简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...

  9. 前端面试必会 | 一文读懂 JavaScript 中的 this 关键字

    this 是一个令无数 JavaScript 编程者又爱又恨的知识点.它的重要性毋庸置疑,然而真正想掌握它却并非易事.希望本文可以帮助大家理解 this. JavaScript 中的 this Jav ...

最新文章

  1. java大文件读写操作
  2. Scott的ASP.net MVC框架系列文章之四:处理表单数据(2)
  3. java 自然语言处理_Java自然语言处理
  4. 地平线黄畅:软件2.0时代,数据驱动进化,算力将成为智能化的基石丨MEET2021...
  5. python算不算编程_Python 并不适合职场编程
  6. 取消显示fps的指令_机器人控制指令介绍(一)
  7. Linux学习笔记——例说makefile 综合案例
  8. 【转】计算机中浮点数的表示
  9. 再述autowiring
  10. like效率 regexp_Oracle 中like效率 正则表达式 浅析
  11. 【Python爬虫】Requests库网络爬虫实战
  12. Hibernate ‍java.lang.ClassCastException ERROR解决方法
  13. 2021-2025年中国船用辅机行业市场供需与战略研究报告
  14. 2022考研计算机是热门专业吗,2022计算机考研专业复习规划是什么?
  15. TMS320C64x+ DSP-----Cache 优化
  16. 面试官问我Python日历模块,我直接用Flask开发Web版日历应用给他
  17. 51单片机99秒倒计时C语言程序,单片机 60秒倒计时
  18. Windows 2008 Server搭建Radius服务器
  19. 【阿朱归类】2015 新兴互联网公司 TOP 300
  20. 表格结构标签 thead tbody

热门文章

  1. jquery.autocomplete自动补齐和自定义格式
  2. 【思维】Kenken Race
  3. win10虚拟桌面使用方法-提高工作效率
  4. Mac JDK 卸载方法
  5. java_自定义标签运行原理
  6. Ubuntu中Qt5.7.0无法输入中文
  7. Android深度探索第五章总结
  8. Activity中finish()和onDestroy()的区别
  9. 对象的List成员添加元素
  10. spring boot log4j2与三方依赖库log4j冲突无法初始化问题解决方法