final关键字细节
final关键字在java中是一个很重要的关键字,其实按照其字面意思理解,就可以一窥这个关键字端倪,final的本意是最终的。所谓最终的,其最重要的特征就是不能修改,由此衍生出的许多细节均应以这个特征作为基础。
final可以修饰类、方法、变量。变量包括成员变量和局部变量。
1.修饰类
final修饰过的类不能被继承,如下的代码在ide中是会报错的。
final class Father{} //The type son cannot subclass the final class Father class son extends Father{}
2.修饰方法
final关键字修饰过的方法不能被子类重写。
class Father {public final void father_func() {System.out.println("father function");}} class son extends Father {//Cannot override the final method from Fatherpublic void father_func() {} }
其实不管是final修饰的类不能被继承,还是final修饰的方法不能被子类重写,都是要保证这个类,这个方法时最终的,不能再被更改。这也符合final的本意。
3.修饰成员变量
final修饰的成员变量只能被赋值一次,而且必须在声明的同时或者构造函数中显式赋值,然后才能使用。否则ide会给出提醒。因为不像普通的成员变量,即便不显式初始化,系统也会默认初始化。
以下代码会出错。
public class FinalDemo {final Father f;//The blank final field f may not have been initializedpublic FinalDemo(){}public static void main(String args[]) {}}class Father {public final void father_func() {System.out.println("father function");}}
这样写才正确
public class FinalDemo {final Father f;public FinalDemo(){f=new Father();}public static void main(String args[]) {}}
4.修饰局部变量
final修饰的局部变量只能被赋值一次。有时候我们方法的形式参数(这也相当于一个局部变量)用final 来声明,目的就是告诉编程的人,不要再在方法体里面给这个变量去赋值了。
如下代码是错误的。
class Father {public void func(final int y){//The final local variable y cannot be assigned. It must be blank and not using a compound assignmenty=3;System.out.println(y);}}
既然y被final修饰,它就不能在方法体中继续赋值。修改成如下,并调用才是正确的。
public class FinalDemo {public static void main(String args[]) {Father f=new Father();f.func(1);f.func(3);}}class Father {public void func(final int y){System.out.println(y);}}
上述执行的结果是1和3。两次调用func,分别传入1和3给final形参y。此处不要认为我修改了y的值,我调用了两次func方法,两次的局部变量并不是同一个。所以不存在重复赋值的说法。
如果在方法体中定义一个final类型的局部变量,则只能给他赋值一次,不能重复赋值,这很好理解。当然也不能不赋值,这是最基本的,方法体中不管是不是final修饰的局部变量,都应该先被赋值才能使用。
5.如果一个类中的成员变量,除了用final修饰,还加上了static,那么他就有两层的属性,首先是静态的,可以直接通过类名直接访问得到。其次它是不可再被修改的。那么这种类型的变量我们可以称之为静态常量,它必须在声明的时候就直接显式初始化,即便在构造函数中都不能再初始化(可以理解为静态变量并不需要实例化就可以访问到,所以有可能不会执行到构造函数里面的代码,这就无法保证这个final变量一定会被初始化,于是干脆在声明的时候就初始化,最为保险)。
这种静态常量可以直接通过类名来访问,当我们再加上一个访问权限修饰符,比如public以后,这就成为了一个全局的常量,在整个项目中都能被访问到。在项目中,我们经常在一个类中写满了public static final类型的变量,并且命名为constant.java。然后通过constant.x来获取这些常量。
转载于:https://www.cnblogs.com/roy-blog/p/7670327.html
final关键字细节相关推荐
- final关键字的这8个小细节,你get到几个?
前言 大家好,我是狂聊君. 今天来聊 final 关键字,因为最近在看的几本书都讲到了 final 关键字,发现好多小细节自己都忽视了,抽空总结了一下,分享给大家. 正文 final关键字是一个常用的 ...
- final 关键字的 8 个小细节
作者 | 狂聊君 责编 | 张文 头图 | CSDN 下载自视觉中国 今天来聊 final 关键字,因为最近在看的几本书都讲到了 final 关键字,发现好多小细节自己都忽视了,抽空总结了一下,分 ...
- Java学习总结:11(final关键字)
final关键字 在Java中final称为终结器,在Java中可以使用final定义类.方法和属性. 一.使用final定义的类不能再有子类,即:任何类都不能继承以final声明的父类. 在设计类的 ...
- final关键字用法
Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量. final类不能被继承,没有子类,final类中的 ...
- Java基础super关键字、final关键字、static关键字、匿名对象整理
super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...
- 《final关键字》
基本介绍: final可以修饰类.属性.方法和局部变量. 在某些情况下,程序员可能有以下需求,就会使用的final 1)当不希望类被继承时,就可以用final修饰 2)当不希望父类的某个方法被子类覆盖 ...
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
- 单例设计模式与final关键字
目录 final关键字 什么是设计模式: 1.静态方法和属性的经典使用 2.设计模式是在大量的实践中总结和理论化之后优选的代码结构.编程风格.以及解决问题的思考方式.设计模式就像是经典的棋谱,不同的棋 ...
- JAVASE零基础入门——package、封装、继承、访问权限修饰符、super、重写、Javabean 和 final 关键字
目录 一.Package 二.封装 三.继承 四.访问权限修饰符 五.super 关键字 六.重写 6.1 重写 与 重载 之间的区别 : 6.2 重写的实现条件: 6.3 重写的需求 : 6.4 调 ...
最新文章
- Android APK反编译
- ISME:中科院微生物所揭示细菌利用光能新机制!
- Spring(AbstractRoutingDataSource)实现动态数据源切换
- Zookeeper详解(一):分布式与Zookeeper
- 吉林大学计算机科学与技术学院推免,2017吉林大学计算机科学与技术大学生推免夏令营...
- 用户表如何区分普通用户和管理员_普通用户如何辨别铝合金型材的好坏?
- 13、Power Query-逆透视列的解析(上)
- ActiveReports 报表应用教程 (4)---分栏报表
- 万用表怎么测量电池容量_万用表检测光电耦合器的常用技巧
- 漫步数学分析二——欧几里得空间
- 上三角、下三角、对称矩阵
- 制作一个html网页的步骤,制作一个完整的网页的步骤
- 微信公众号接入微软小冰
- 曾扬言 机器人合法公民_曾扬言“摧毁人类”的机器人索菲亚,现状如何?如果失控了咋办?...
- 衡量电子计算机性能指标是,衡量计算机的性能指标有
- python 基础知识点 (一)
- Python.openpyxl操作Excel
- css constant() env()设置iphoneX等机型刘海屏、底部小黑条自动留白 设置安全区域与边界的距离
- 加速Yahoo收录你博客的窍门
- 论文阅读 [CVPR-2022] BatchFormer: Learning to Explore Sample Relationships for Robust Representation Lea