第七章.final关键字和所说的接口
来源:互联网 发布:inbodyband 知乎 编辑:程序博客网 时间:2024/06/07 16:54
导语:java中的final关键字的含义存在着细微的区别,但通常指“这是不可改变的”.不想改变可能处于两种理由:设计和效率,
两者相差甚远,所以可能被误用 final可以修饰 数据、方法和类。
1.final 关键字修饰的数据
- 有时数据恒定不变是很重要的。
- 一个永不改变的编译时变量
- 一个在运行时被初始化的值而不希望它被改变。
- 编译时常量必须是基本数据类型,并且以final关键字修饰。在对这个常量进行定义的时候,必须对其进行赋值。
- 一个既是static有时final的域只占据一段不能改变的存储空间。
- 对象引用运用final时,final使引用恒定不变,一旦这个引用被初始化指向一个对象时,这个引用就再也不能指向其他对象了,
对象时可以改变的,目前还没有使对象恒定不变的途径。数组也是对象。 public static final int VALUE_THREE = 39;
定义为public 则可以被用于包之外,定义为static,则强调只有一份,定义为final,则说明是一个不可改变的常量。
编码规范:一般全为大写,中间用_隔开,- 当你试图修改一个final时,编译器将会报错。
- 当一个值为静态的时候,在装载时已被初始化,而不是每次创建新对象都会初始化。
空白的final:java允许生成“空白的final”,是指被声明为final但是又未给定初值的域。无论什么情况,编译器都保证空白final在使用前被初始化。
空白final提供了更大的灵活性,
必须在域的定义前或每个构造器中用表达式对final进行赋值,以保证使用前总是被初始化。没有初始化,编译器将会报错。
public class BlankFinal {private final int j;//空白finalpublic BlankFinal(){j = 1;}public BlankFinal(int i){j = 2;}}
2.final 参数[方法 内的形参]
class Gizmo{public void spin(){}}public class FinalArguments {void with(final Gizmo g){}void without(Gizmo g){g = new Gizmo();g.spin();}//void f(final int i){i++;}i在这里是不能改变的int g(final int i){return i + 1;}public static void main(String[] args) {FinalArguments bf = new FinalArguments();bf.without(null);bf.with(null);}}
方法f()和g()展示了当基本类型的形式参数被知名为final时,可以读参数,但不可以改变参数。这一特性主要用来想匿名内部类传递参数。
3.final方法
- 使用final关键字可以把方法锁定,以防任何继承类修改它的含义(重写)。想要确保父类中的方法保持不变并不会被覆盖,就是用final关键字。
- 使用final早期的原因是效率,不过已经被淘汰啦,因为应该让编译器和JVM去处理效率的问题,
只有在想明确禁止覆盖的时候,才将方法设置为final.
4.final 和 private
- 类中的private方法都隐式的指定为final的。其他人不可访问
- 由于无法取用private方法,所以也就无法覆盖它。
- 一种特殊的情况:子类中的方法名和父类中的private修饰的方法名相同,编译器不会报错,其实这两个方法并无关系,
一个是父类中的方法,一个是子类中的新方法,他们是两个不同的方法,private是永远不会被覆盖的。
5.接口
- 如果一个方法为private,它就不是基类的接口的一部分。它仅是一些隐藏于勒种的程序代码。
6.final类
- 当想要某个类不能被继承时,就加上final关键字,
- final类中的方法都隐式的指定为时final,因为无法覆盖他们。在final类中给方法添加final修饰词,并没有什么作用。
- final类的域可以根据个人意愿选择是或者不是final。final的域有final的规则存在。
7.final的缺点
- 影响了复用。所以除非特殊需要,不要用这个关键字。
8.淘汰的类
- Vector被ArrayList代替,Hashtable被HashMap代替。
0 0
- 第七章.final关键字和所说的接口
- Java知识点整理:第七章:static关键字、final关键字、抽象类 、接口、Object类
- 抽象类和接口及final关键字
- final关键字、抽象类和接口
- JAVA面向对象5:final关键字、抽象类和接口
- final关键字、抽象类、接口
- final和static关键字的混合使用
- Java 关键字 final 和static 的区别
- Java 里的 abstract 和 final 关键字
- Java关键字static和final的理解
- final关键字和static的用法
- final关键字、多态、抽象类、接口的特点及其使用
- java中的final关键字、抽象类及接口的定义
- 接口 ,多态,static关键字 ,final关键字
- super关键字和final关键字
- static 关键字和final关键字
- static关键字和final关键字
- final关键字和static关键字
- JZOJ4703. Buy
- 在CentOS下利用Eclipse调试FFmpeg
- 编译生成静态库文件
- LeetCode | Unique Paths I,II
- DataGridView表格绘制行序号
- 第七章.final关键字和所说的接口
- STM32F103VET6/STM32F407VET6 原理图
- jQuery使用on代替bind
- Linux 任务调度服务crond的使用
- 【CQOI2012】局部极小值
- 【Hibernate】--Hibernate基础介绍
- Android小程序--简单图片浏览器
- AndroidStudio——文件的读取之Raw&Assets的读取
- Jsp-sql语句错误