Java 关键字之 final
欢迎学习 Java 基础文章系列之 final 关键字
- final 代表什么意思?
- final 通常是指无法被改变或者不能被改变的,什么情况下不想被改变呢?
- 不想改变可能有两种原因:设计或者效率。
- final 通常是指无法被改变或者不能被改变的,什么情况下不想被改变呢?
- 在Java中 final 关键字会在哪几个地方使用到?
- 有三种地方使用:数据(成员变量、参数)、方法、类。
- final 数据(成员变量、参数)
常量以关键 final 表示,必须是基本数据类型。
对于基本类型使数值恒定不变,而用于对象引用,使引用恒定不变,一旦引用被初始化指向一个对象,就无法改为指向另一个对象,然而对象其自身却是可以被修改的,Java 并未提供使任何对象恒定不变的途径(但是可以自己编写类已取得是对象恒定不变的效果),这一限制同样适用于数组,它也是对象。- 空白 final
Java 允许生成:“空白 final”,即被声明为 final 但又未给定初始值的域。 - final 参数
Java中允许在参数列表中以声明的方式将参数指明为 final。无法在方法中更改参数引用所指向的对象。
你可以读取参数,但却无法修改参数,这一特性主要用来向匿名类传递数据。
- 空白 final
- final 方法
final 方法的考虑:出于对设计的考虑:确保在继承中使方法行为保持不变,并且不会被覆盖,或者出于效率(遭受劝退了)。
该方法不会被重写(覆盖、覆写)。
final 和 private 关键字
类中所有的 private 方法都是隐式地指定为 final 的。由于无法使用 private 声明的方法,所以也就无法重写该方法。
如果试图重写一个 private 方法(隐含式的 final),似乎是可行的,并且编译器也不会提示错误。
“重写(覆盖、覆写)”只有在某方法是父类的接口(非interface)的一部分时才会出现。
final修饰的方法在特定的访问权限下可以被继承。
这是因为,方法是否被final修饰与方法的访问权限是两回事,没有任何关系,被final修饰的方法和未被final修饰的方法都可以自由的指定访问权限。
我们有兴趣去谈论final关键字和访问权限关键字在修饰方法的过程的起到的作用,如下表(声明:final和访问权限是两个独立的概念,没有任何比较意义,所有本表仅方便读者理解,不可作为正统知识)
- final 数据(成员变量、参数)
- 有三种地方使用:数据(成员变量、参数)、方法、类。
protect关键字 | final关键字 | private关键字 | |
---|---|---|---|
是否可以继承 | 是 | 是 | 否 |
是否可以重写 | 是 | 否 | 否 |
小结 | private < final < protect (仅适用于方法) |
正如上表所示,private实现了final方法不可重写的功能,并附加不可继承功能。(再次声明:final和访问权限是两个独立的概念,没有任何比较意义,所有上表仅方便读者理解,不可作为正统知识)可以对private方法添加final关键字,但是这种做法没有任何意义。
* final 类
final 类的考虑:对该类的设计永不需要做任何变动,或者出于安全的考虑不希望它有子类。
该类不能被继承,final 类中所有的方法都是隐式指定为 final 关键字的。
Java 关键字之 final的更多相关文章
- [JAVA关键字] static & final
JAVA十分常见的关键字static & final 总的来说final表示常量,即不可更改的:而static表示静态,即全局的 1. final 类:不能被继承 2. final 方法:能被 ...
- Java关键字(四)——final
对于Java中的 final 关键字,我们首先可以从字面意思上去理解,百度翻译显示如下: 也就是说 final 英文意思表示是最后的,不可更改的.那么对应在 Java 中也是表达这样的意思,可以用 f ...
- java关键字之final
final表示不能修改. final修饰的方法不能被重写, final修饰的类不能被继承并且类里的所有方法都是final,成员变量可以是final或者不是final. final修饰的成员变量不可以改 ...
- Java 关键字static final使用总结
Static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被 ...
- Java关键字final、static
一.final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final ...
- 浅析Java中的final关键字(转载)
自http://www.cnblogs.com/dolphin0520/p/3736238.html转载 一.final关键字的基本用法 在Java中,final关键字可以用来修饰类.方法和变量(包括 ...
- java关键字extends(继承)、Supe(父类引用空间)、 This(方法调用者对象)、Instanceof(实例类型-判断对象是否属于某个类)、final(最终)、abstract(抽象) 、interface(接口)0
java 继承使用关键字extends 继承的作用:减少代码量,优化代码 继承的使用注意点: 1子类不能继承父类的私有变量 2.子类不能继承父类的构造方法 3.子类在调用自己的构造方法时 会默认调 ...
- java笔记——Java关键字static、final使用小结
static 1. static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...
- 关于Java中的final关键字
Java中的final关键字是用来限制用户行为的,说白了,就是用来限制我们这些程序员的.final可以用来修饰:变量.方法.类. 1)Java final variable final用来修饰变量时, ...
随机推荐
- Python3入门系列之-----算术运算符|比较运算符|赋值运算符|逻辑运算符|成员运算符|身份运算符
什么是运算符? 本章节主要说明Python的运算符.举个简单的例子 1 +2 = 3 . 例子中,1 和 1.2 被称为操作数,"+" 称为运算符. Python语言支持以下类型的 ...
- 用Fiddler抓不到https的包?因为你姿势不对!往这看!
前言 刚入行测试的小伙伴可能不知道,Fiddler默认抓http的包,如果要抓https的包,是需要装证书的!什么鬼证书?不明白的话继续往下看. Fiddler 抓取 https 数据 第一步:下载 ...
- 支持remote write和exemplar的prometheus服务
最近项目组在做Prometheus指标采集和告警,其中用到了Prometheus的exemplar特性,由于该特性比较新,当前支持该特性的存储有比较少.因此需要自行实现exemplar功能. 我在gi ...
- 单机百万连接调优和Netty应用级别调优
作者:Grey 原文地址:单机百万连接调优和Netty应用级别调优 说明 本文为深度解析Netty源码的学习笔记. 单机百万连接调优 准备两台Linux服务器,一个充当服务端,一个充当客户端. 服务端 ...
- ElasticSearch IK热词自动热更新原理与Golang实现
热更新概述 ik分词器本身可以从配置文件加载扩张词库,也可以从远程HTTP服务器加载. 从本地加载,则需要重启ES生效,影响比较大.所以,一般我们都会把词库放在远程服务器上.这里主要有2种方式: 借助 ...
- c语言中一条竖线是什么符号?
"|"在C语言中表示按位或,是双目运算符.其功能是参与运算的两数各对应的二进位(也就是最后一位)相或.只要对应的二个二进位有一个为1时,结果位就为1.参与运算的两个数均以补码出现. ...
- 初学python-day5 流程控制
流程控制 一.判断语句 1.if语句(单一条件分支) 结构: if 表达式: 为真的时候执行的语句 概述:当程序运行到if语句时候,首页要计算表达式的值,判断真假,如果表达式的职位为真,则执行i ...
- 源码解析-Abp vNext丨LocalEventBus
前言 基础篇已经更新完了,从本篇开始我们进入,中级篇(学习部分源代码)我会挑一些我个人认为比较重要的知识点结合部分开源项目进行源码讲解,咱们废话不说直接上车. Abp vNext的事件总线分2种,一种 ...
- JVM:内存溢出OOM
JVM:内存溢出OOM 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 经典错误 JVM 中常见的两个 OOM 错误 StackoverflowError:栈溢出 ...
- [技术博客]使用pylint实现django项目的代码风格检查
使用pylint实现django项目的代码风格检查 前言 一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码的风格必定会有很大的差别.且不说会存在多个人同时开发同一模块的情 ...