【Java基本功】一文读懂final关键字的用法 1
本文主要介绍了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相关推荐
- 【Java基本功】一文读懂final关键字的用法
本文主要介绍了final关键字的基本使用方法及原理 final关键字可以修饰类.方法和引用. 修饰类,该类不能被继承.并且这个类的对象在堆中分配内存后地址不可变. 修饰方法,方法不能被子类重写. 修饰 ...
- 面试:一文搞懂 final 关键字的作用
前言 Java语言支持的变量类型有: 类变量:独立于方法之外的变量,用 static 修饰. 实例变量:独立于方法之外的变量,不过没有 static 修饰. 局部变量:类的方法中的变量. 实例代码: ...
- 一文读懂 volatile 关键字
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:有了这 4 款工具,老板再也不怕我写烂SQL了个人原创+1博客:点击前往,查看更多 作者:对弈 来源:https ...
- C++ ——一文读懂:关键字override
override在C++中它是覆盖了一个方法并且对其重写,从而达到不同的作用.在我们C++编程过程中,最熟悉的就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明 ...
- 【Python】一文读懂Python正则表达式常用用法
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 编辑:爱学AI 来源:geekvi 链接: www.segmentfault.co ...
- 一文读懂Java中File类、字节流、字符流、转换流
一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...
- JVM(一)一文读懂Java编译全过程
一文读懂Java编译全过程 java代码首先要通过前端编译器编译成.class字节码文件,然后再按一定的规则加载到JVM(java 虚拟机)内运行,有三种运行方式,解释模式(javac).编译模式(C ...
- java中date类型如何赋值_一文读懂java中的Reference和引用类型
简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...
- 前端面试必会 | 一文读懂 JavaScript 中的 this 关键字
this 是一个令无数 JavaScript 编程者又爱又恨的知识点.它的重要性毋庸置疑,然而真正想掌握它却并非易事.希望本文可以帮助大家理解 this. JavaScript 中的 this Jav ...
最新文章
- (发现)问题才是推动创新的动力系列:两种类型硬币(均匀和非均匀)能否用第一次得正面朝上的概率推断“第一第二次依次获得正面反面情况”的概率?
- 【OpenCV】使用projectPoints实现透视图到俯视图的变化效果
- LINUX Find命令使用
- 前端学习(3121):react-hello-react的state的简写方式
- gdb调试时调用函数、设置观察点以及GDB的宏
- python字体大小颜色_在matplotlib中使用单词作为标记的“干净”方式?使字体大小和颜色不同?...
- NAS与SAN架构:如何比较这两个存储系统
- 齐次坐标和单应性矩阵
- 最佳黑色背景的Visual Studio 2005/2008配置-尤其适合开发人员使用
- Mapped Statements collection already contains value for com.wen.mapper.ProjectMapper.xxx
- 一些网站后台模板源码分析
- python编程星期几_python如何获取星期几
- STEAM 教育相关书籍
- jpress连接数据库mysql_win10+java+mysql+tomcat+jpress环境搭建与部署
- iOS开发者遇到审核失败的原因及解决办法
- 三国志战略版:Daniel_袁术分析
- Android 设置黑白主题
- 公众号在哪引流?运营公众号需要怎么做?公众号内容建设
- Python8.2(3)传递实参
- VISIO使用技巧汇总
热门文章
- wiki源码_一个轻量级的企业Wiki和团队知识分享平台:MM-Wiki搭建教程
- Python会赶超Java吗_Python 赶超 Java,JavaScript 稳坐第一 | GitHub
- Maven详解及相关操作
- windows ce操作系统能用哪个导航_微软的windows和苹果的mac操作系统,在技术难度上哪个更高...
- 用户行为分析面面观之二
- 如何确定autosar的版本_从工程师的角度看AUTOSAR
- 取消button的点击效果_(Vue动效)6.Vue中列表过渡效果
- Ubuntu 环境变量文件介绍
- 2014-VGG网络讲解
- linux nvm node 权限不够_centos部署node+mongodb环境