java--final 类在程序中的影响
很多时候我都记不住也弄不太清楚final类在程序的中的作用到底为何,今天正好看到了,就把它记下来,省的以后忘了的时候到处找资料~
final修饰符对程序的影响总的来说有三点:
(1)final可以修饰变量,被final修饰的变量被赋初始值之后,不能对其进行重新赋值。
(2)final可以修饰方法,被final修饰的方法不能被重写。
(3)final可以修饰类,被final修饰的类不能派生出子类。
1.final修饰的变量
首先回顾一下final实例变量的知识,被final实例的变量必须显式的指定初值,而且只能在如下三个位置指定初始值:定义final实例变量时指定初始值,在非静态初始化块中为final实例变量指定初始值,在构造器中为final实例变量指定初始值。本质上final实例变量只能在构造器中被赋初始值。
对于final类变量来说,也必须显式的指定初始值。通常在两个地方指定:定义final类变量时指定初始值,在静态初始化块中指定初始值。而且本质上final类变量都是在静态初始化块中被赋初始值。
对于一个使用final来修饰的变量而言,如果定义该变量的时候就指定初始值,而且这个初始值在编译的时候就可以确定下来,那么这个final变量将不再是一个变量,系统会将其当成“宏变量”处理,也就是说,所有出现该变量的地方,系统将直接把它当成对应的值处理。如果被赋的表达式只是基本的算术运算表达式或者字符串连接运算,没有访问普通变量,调用方法,系统仍旧会将此变量当成“宏变量”处理。
对于final实例变量而言,只有在定义该变量时指定初始值才会有“宏变量”的效果。在非静态初始化块、构造器中为final实例变量指定初始值则没有“宏变量”的效果。对于final类变量也是一样的,只有再定义该变量时指定初始值才会有“宏变量”的效果,在静态初始化块中无效。
2.final修饰的方法
一般而言,用final修饰的方法不能被重写。而且,同时用private和final修饰一个方法没有意义,但是是被java语法允许的。
3.final修饰的类
内部类或者匿名内部类中访问局部变量必须声明为final。
java--final 类在程序中的影响的更多相关文章
- 对类HelloWorld程序中添加一个MessageBox弹窗
对类HelloWorld程序中添加一个MessageBox弹窗 分析: 任一程序运行的时候都会加载kernel32.dll的,但MessageBoxA()这个API却是在user32.dll中的.所以 ...
- Java:类集框架中集合的学习
Java:类集框架中集合的学习 集合 Java:Set的学习 Set是类集框架中的集合类.集合是不按特定的方式排序,并且没有重复对象的一种类. Q:Set如何操作?Set中的不按特定方式排序是怎么排序 ...
- Java final类&所有构造方法均为private的类(类型说明符&访问控制符)
1. final是类型说明符,表示关闭继承,即final类不能有子类: 但final类可能可以在类外创建对象(即final类的构造方法可以不是private型): 在同一包中时,可以在任何另外一个类中 ...
- Java final类
如果说整个类都是final(在它的定义前冠以final关键字),就表明自己不希望从这个类继承,或者不允许其他任何人采取这种操作.换言之,出于这样或那样的原因,我们的类肯定不需要进行任何改变:或者出于安 ...
- java工具类学习,系统中用户密码加密总结
现在项目,用户注册登录部分很少有涉及到了,原因:现在热门开发框架都已经在底层帮我们做了一套用户注册,密码加密,登录认证,权限控制,缓存数据等基本功能. 这有利于项目的快速完成,只需要搬砖码畜们专注于业 ...
- 终于讲清楚了:深入理解Java 应用程序中 final 关键字的各种使用场景
在 Java 语言众多的关键字中,final 关键字无疑是被提到最多的,也是在面试过程中经常被问到的知识点.今天,老王查找了很多材料,最后终于收集了关于 final 关键字比较全的知识点.首先,fin ...
- Java 中常见的 final 类
Java 中常见的 final 类 java.lang 包 public final class Boolean extends Object implements Serializable, Com ...
- 编写Java程序,创建一个数学工具类,将该类设计为final类,Final 修饰符的使用。
返回本章节 返回作业目录 需求说明: 创建一个数学工具类. 将该类设计为final类. 将该类的构造方法的访问权限定义为私有,以防止外界实例化该类. 在该类定义静态double类型常量π,其值为3.1 ...
- java程序中获取kerberos登陆hadoop
本文由作者周梁伟授权网易云社区发布. 一般我们在使用kbs登陆hadoop服务时都直接在shell中调用kinit命令来获取凭证,这种方式简单直接,只要获取一次凭证之后都可以在该会话过程中重复访问.但 ...
随机推荐
- 【记录】sqli-labs-master搭建
附上:链接:http://pan.baidu.com/s/1bpCRzl1 密码:ep48 下载完成后直接解压到phpstudy(该工具之前分享过,直接搜索下)的WWW目录下,启动phpstudy, ...
- web前端css定位position和浮动float
最近做了几个项目:配资公司,ecmal商城等,客户对前台要求都很高.所以,今天来谈谈css的基础,以及核心,定位问题. div.h1或p元素常常被称为块级元素.这意味着这些元素显示为一块内容,即“块框 ...
- libevent 同性恋 讲解
https://aceld.gitbooks.io/libevent/content/25hong_fa_mo_5f0f_md.html github 这url 干活比较好 https://githu ...
- python-OS.path.join()路径拼接
os.path.join()函数: 第一个以”/”开头的参数开始拼接,之前的参数全部丢弃. 以上一种情况为先.在上一种情况确保情况下,若出现”./”开头的参数,会从”./”开头的参数的上一个参数开始拼 ...
- 如何优雅地使用httprunner进行接口测试
一天,你的领导X要你对某接口做测试,你一听,接口测试,高大上.用什么做好呢?postman?jmeter?loadrunner?balabala...优秀的你,想到了一大堆工具,当然也包括用pytho ...
- FZU 2207 ——以撒的结合——————【LCA + 记录祖先】
Problem 2207 以撒的结合 Accept: 47 Submit: 161Time Limit: 1000 mSec Memory Limit : 32768 KB Proble ...
- 【linux相识相知】独立硬盘冗余阵列-RAID
独立硬盘冗余阵列(RAID,Redundant Array of Independant Disks),旧称为廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks ...
- 嵌入式Tomcat Web服务器的使用
在运行web工程时,常常要频繁启动tomcat,使用嵌入式tomcat可以减少部分重复操作. 1.下载tomcat5.0.28embed.zip 解压文件夹复制到工程下. http://archive ...
- C# 实现OrderBy按多个字段排序
//倒序 list.OrderByDescending(i => i.a).ThenByDescending(i => i.b); //顺序 list.OrderBy(i => i. ...
- C# 获取电脑硬盘剩余空间
获取本地硬盘的所有剩余空间: 主要应用到System.IO类库的:Driveinfo.Directory,将model转换成json需要用到Newtonsoft.Json.JsonConvert.Se ...