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

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

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

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

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

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

具体看一下下面的栗子:

final class Fi {    int a;    final int b = 0;    Integer s;
}class Si{    //一般情况下final修饰的变量一定要被初始化。    //只有下面这种情况例外,要求该变量必须在构造方法中被初始化。    //并且不能有空参数的构造方法。    //这样就可以让每个实例都有一个不同的变量,并且这个变量在每个实例中只会被初始化一次    //于是这个变量在单个实例里就是常量了。    final int s ;    Si(int s) {        this.s = s;    }}class Bi {    final int a = 1;    final void go() {        //final修饰方法无法被继承    }}class Ci extends Bi {    final int a = 1;//        void go() {//            //final修饰方法无法被继承//        }}final char[]a = {'a'};final int[]b = {1};

final修饰类

@Testpublic void final修饰类() {    //引用没有被final修饰,所以是可变的。    //final只修饰了Fi类型,即Fi实例化的对象在堆中内存地址是不可变的。    //虽然内存地址不可变,但是可以对内部的数据做改变。    Fi f = new Fi();    f.a = 1;    System.out.println(f);    f.a = 2;    System.out.println(f);    //改变实例中的值并不改变内存地址。Fi ff = f;    //让引用指向新的Fi对象,原来的f对象由新的引用ff持有。    //引用的指向改变也不会改变原来对象的地址    f = new Fi();    System.out.println(f);    System.out.println(ff);}

final修饰方法

@Testpublic void final修饰方法() {    Bi bi = new Bi();    bi.go();//该方法无法被子类Ci重写
}

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

@Testpublic void final修饰基本类型变量和引用() {    final int a = 1;    final int[] b = {1};    final int[] c = {1};//  b = c;报错    b[0] = 1;    final String aa = "a";    final Fi f = new Fi();    //aa = "b";报错    // f = null;//报错    f.a = 1;}

转载于:https://www.cnblogs.com/xll1025/p/10257665.html

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

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

    本文主要介绍了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. (发现)问题才是推动创新的动力系列:两种类型硬币(均匀和非均匀)能否用第一次得正面朝上的概率推断“第一第二次依次获得正面反面情况”的概率?
  2. 【OpenCV】使用projectPoints实现透视图到俯视图的变化效果
  3. LINUX Find命令使用
  4. 前端学习(3121):react-hello-react的state的简写方式
  5. gdb调试时调用函数、设置观察点以及GDB的宏
  6. python字体大小颜色_在matplotlib中使用单词作为标记的“干净”方式?使字体大小和颜色不同?...
  7. NAS与SAN架构:如何比较这两个存储系统
  8. 齐次坐标和单应性矩阵
  9. 最佳黑色背景的Visual Studio 2005/2008配置-尤其适合开发人员使用
  10. Mapped Statements collection already contains value for com.wen.mapper.ProjectMapper.xxx
  11. 一些网站后台模板源码分析
  12. python编程星期几_python如何获取星期几
  13. STEAM 教育相关书籍
  14. jpress连接数据库mysql_win10+java+mysql+tomcat+jpress环境搭建与部署
  15. iOS开发者遇到审核失败的原因及解决办法
  16. 三国志战略版:Daniel_袁术分析
  17. Android 设置黑白主题
  18. 公众号在哪引流?运营公众号需要怎么做?公众号内容建设
  19. Python8.2(3)传递实参
  20. VISIO使用技巧汇总

热门文章

  1. wiki源码_一个轻量级的企业Wiki和团队知识分享平台:MM-Wiki搭建教程
  2. Python会赶超Java吗_Python 赶超 Java,JavaScript 稳坐第一 | GitHub
  3. Maven详解及相关操作
  4. windows ce操作系统能用哪个导航_微软的windows和苹果的mac操作系统,在技术难度上哪个更高...
  5. 用户行为分析面面观之二
  6. 如何确定autosar的版本_从工程师的角度看AUTOSAR
  7. 取消button的点击效果_(Vue动效)6.Vue中列表过渡效果
  8. Ubuntu 环境变量文件介绍
  9. 2014-VGG网络讲解
  10. linux nvm node 权限不够_centos部署node+mongodb环境