终于讲清楚了:深入理解Java 应用程序中 final 关键字的各种使用场景
在 Java 语言众多的关键字中,final 关键字无疑是被提到最多的,也是在面试过程中经常被问到的知识点。今天,老王查找了很多材料,最后终于收集了关于 final 关键字比较全的知识点。首先,final 关键字可以修饰的对象有三个:一是修饰变量、二是修饰方法、三是修饰类,下面我们来看经过 final 关键字修饰的这三种对象会有着怎样的不同。
1,final 关键字修饰变量
在使用 final 关键字修饰变量时,又可以分为两种情况:一种是基本数据类型的变量、另一种是引用类型的变量。final 关键字在修饰基本数据类型时必须对变量赋予初始值,因此,final 关键字也经常和 static 关键字一起用来声明常量值,final 正好限制了必须赋值、static 声明了静态变量。
// 定义常量
final static String str = "老王说编程";
修饰引用变量时,该引用变量如果已经被赋值则不可以再被赋值,否则也会出现不能被编译的情况。
// 定义一个 Main 对象并且实例化
final Main main = new Main();
// 被 final 关键字修饰后,再次对 Main 对象进行赋值时就会出现错误
main = new Main();
2,final 关键字修饰方法
通过 final 关键字修饰的方法是不能被子类的方法重写的,相当于一个方法的功能已经被定了不能进行重写修改。一般情况下,如果一个方法的功能已经确定好不再改变了则可以使用 final 关键字修饰一下,因为 final 关键字修饰以后的方法是在程序编译的时候就被动态绑定了不用等到程序运行的时候被动态绑定,这样就大大的提高了执行的效率。
public final void method() {
System.out.println("it is final method");
}
3,final 关键字修饰类
被 final 关键字修饰的类一般叫 final 类,final 类是不能被继承的,这也就意味着 final 类的功能一般是比较完整的。因此,Jdk 中有很多类都是用 final 关键字进行修饰的,它们不需要被继承。其中,最常见的 String 类就是 fianl 关键字修饰的类,还有其他的装饰类等等。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
}
public final class Integer extends Number implements Comparable<Integer> {
}
public final class Long extends Number implements Comparable<Long> {
}
以上包括其他的装饰器类都是被 final 关键字进行修饰的,它自身提供的方法和功能也是非常完备的。
4,static 关键字的不同
既然文章说明 final 关键字,难免会让人联想到 static 关键字的使用场景,毕竟,final static 成对出现的频率也是比较高的。使用 static 修饰的变量只会在类加载的时候被初始化不会因为对象的再次创建而改变。
// 在类中定义一个变量 num 接收随机数,因为只有类对象加载的时候 num 值才会初始化,
// 因此,在之后 num 的值都是不会改变的
static double num = Math.random();
更多精彩前往微信公众号【老王说编程】>>>
终于讲清楚了:深入理解Java 应用程序中 final 关键字的各种使用场景的更多相关文章
- 在 Java 应用程序中使用 Elasticsearch
如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsear ...
- 在Java Web程序中使用监听器可以通过以下两种方法
之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...
- 在 Java 应用程序中加一些 Groovy 进来
如果您一直在阅读这个系列,那么您应该已经看到有各种各样使用 Groovy 的有趣方式,Groovy 的主要优势之一就是它的生产力.Groovy 代码通常要比 Java 代码更容易编写,而且编写起来也更 ...
- 深入理解Java内存模型中的虚拟机栈
深入理解Java内存模型中的虚拟机栈 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都会有各自的用途,以及创建和销毁的时间,有的区域会随着虚拟机进程的启 ...
- 在Java Web程序中使用Hibernate
在Java Web程序中使用Hibernate与普通Java程序一样.本文中将使用Servlet和JSP结合Hibernate实现数据库表的增删改查操作. Web程序中,hibernate.cfg.x ...
- 在 Java 应用程序中绑定 Bean 和数据
本指南介绍了 NetBeans IDE 对 Java 应用程序中 Bean 绑定和数据绑定的支持. 要学完本教程,您需要具备以下软件和资源. 软件或资源 要求的版本 NetBeans IDE 版本 7 ...
- Java应用程序中的声音播放
声音可以创造意境,触发遐想,当与虚拟图像相结合时,更加可以让整个世界充满幻觉,声音是多媒体技术的基础. 播放声音是Java对多媒体的支持一个重要部分,它支持的声音文件类型主要有: AU - (扩展名为 ...
- 在并发Java应用程序中检测可见性错误
了解什么是可见性错误,为什么会发生,以及如何在并发Java应用程序中查找难以捉摸的可见性错误.这些问题你可能也遇到过,当在优锐课学习了一段时间后,我对这些问题有了一定见解,写下这篇文章和大家分享. 检 ...
- [转载]Java应用程序中的内存泄漏及内存管理
近期发现测试的项目中有JAVA内存泄露的现象.虽然JAVA有垃圾回收的机制,但是如果不及时释放引用就会发生内存泄露现象.在实际工作中我们使用Jprofiler调用java自带的 jmap来做检测还是很 ...
随机推荐
- Linux | 压缩与解压详解
tar tar 命令用于对文件进行打包压缩或解压,格式: tar [选项][文件] tar命令的参数及其作用 参数 作用 -c 创建压缩文件 -x 解开压缩文件 -t 查看压缩包内有哪些文件 -z 用 ...
- GYM101471D「ICPC2017 WF」Money for Nothing
「ICPC2017 WF」Money for Nothing 传送门 我们可将生产商和消费商都看成二维平面上的点,其坐标分别为 \((d_i,p_i)\),\((e_i,q_i)\). 那么问题转变为 ...
- 【Python从入门到精通】(十一)Python的函数的方方面面【收藏下来保证有用!!!】
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本文主要介绍Python的函数,函数的定义,使用,可变参数等等都有详细介绍. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题及需要,欢迎 ...
- File类与常用IO流第九章——转换流
第九章.转换流 字节编码和字符集 编码:按照某种规则将字符以二进制存储到计算机中. 解码:将存储在计算机中的二进制数按照某种规则解析显示出来. 字符编码:Character Encoding ,就是一 ...
- 【转载】Java学习笔记
转载:博主主页 博主的其他笔记汇总 : 学习数据结构与算法,学习笔记会持续更新: <恋上数据结构与算法> 学习Java虚拟机,学习笔记会持续更新: <Java虚拟机> 学习Ja ...
- 开源百宝箱《HelloGitHub》第 64 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. HelloGitHub 有实战.教程.黑科技.开源书籍.企业级开源项目,涵盖多种编程 ...
- 将base64Url对应图片保存到本地
上图中的内容就是base64编码之后对应的Url 图中base64,之前的都是用于声明该图片的格式以及它的编码格式 base64,之后的就是该图片对应的数据了 我们只需要把数据转换为字节保存下来即 ...
- python里面的多进程实例
python执行多任务方式:python语言中实现多任务的方式有三种:线程,进程和协程 一.python多进程: multiprocessing 概念:Python提供了非常好用的多进 ...
- python算法学习--待续
几个算法网站 算法可视化网站:https://visualgo.net/en,通过动画展示算法实现过程 程序可视化网站:http://www.pythontutor.com/visualize.htm ...
- 微信小程序工具下载与安装
下载 第一步:百度搜索"微信公众平台" 第二步:登录微信公众平台 第三步:点击微信开发者工具 第四步:按照自己的操作系统下载对应的版本的开发者工具,我的是Windows10 64位 ...