Java中的Final关键字用法汇总及简单示例
来源:互联网 发布:淘宝网大码女装夏装 编辑:程序博客网 时间:2024/06/02 01:17
可能使用到final的情况有3种:数据、方法和类。
一、final数据
对于基本类型,final使数值恒定不变;而对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法把它改为指向另一个对象。然而,对象本身却是可以被修改的。
class Value{ int i; public Value(int i){this.i=i;}}public class FinalData{ private final int valueOne=1; private int valueTwo=2; private final Value v1=new Value(11); private Value v2=new Value(22); public static void main(String[] args){ //! valueOne=3; 错误,静态不能更改 valueTwo=3; //可以更改 //! v1=new Value(33); 不可更改引用 v1.i+=1; //可以更改内容 v2=new Value(33); //非final,可以更改引用 }}
注:带有恒定初始值(即,编译器常量)的final static 基本类型全用大写字母命名,并且字与字之间用下划线隔开。
public static final int VALUE_ONE=3;
必须在域的定义处或者每个构造器中用表达式对final进行赋值,这正是final域在使用前总是被初始化的原因所在。
二、final方法
使用final方法的原因是:把方法锁住,以防任何继承类修改它的含义,这是出于设计的考虑:想要确保在继承中使方法行为保持一致,并且不会被覆盖。
类中所有的private方法都隐式地指定为是final的。由于无法取用final方法,所以也就无法覆盖它。
class WithFinals{ private final void f(){print("Hello World");} private void g(){ print("WithFinals.g()");}}class OverridingPrivate extends WithFinals{ private final void f(){ print("OverridingPrivate.f()");} private void g(){ print("OverridingPrivate.g()")}}class OverridingPrivate2 extends OverridingPrivate{ public final void f(){ print("OverrindingPrivate2.f()")} public void g(){ print("OverridingPrivate2.g()")}}public class FinalOverriding{ public static void main(String[] args){ OverridingPrivate2 op2=new OverridingPrivate2(); op2.f(); op2.g(); //向上转型 OverridingPrivate op1=op2; //但是你不能调用下面的方法 //! op1.f(); //! op1.g(); //向上转型 WithFinals wf=op2; //同样不能调用下面的方法 //!wf.f(); //!wf.g(); }}/*OverridingPrivate2.f()OverridingPrivate2.g()*/
“覆盖”只有在某方法是基类的接口的一部分时才会出现。即,必须能将一个对象向上转型为它的基本类型并调用相同的方法。如果某方法为private,它就不是基类的接口的一部分。它仅是一些隐藏于类中的程序代码,只不过是具有相同的名字。如果在导出类中以相同的名称生成一个public、protected或包访问权限方法,那么该方法并没有覆盖基类的方法,仅是生成了一个新的方法。
三、final类
当某个类的整体定义为final时,就表明了你不打算继承该类,而且也不允许别人这样做。
final class Demo{ int i=1; final int j=2; void f(){}}
final类不能被继承。final类的域可以根据个人意愿选择是或者不是final,然而,由于final类禁止继承,所以final类中的所有方法都隐式指定为final的,因为无法覆盖它们。在final类中可以给个方法添加final修饰词,但这不会增添任何意义。
PS:总结自《Thinking in Java Fourth Edition》
- Java中的Final关键字用法汇总及简单示例
- java中的final关键字用法
- java 中的 final 关键字 和 static 用法
- java语言中的final关键字用法
- Java关键字final用法
- java中的this关键字与final关键字的用法总结
- java final用法汇总
- Java中的final关键字
- JAVA中的关键字FINAL
- java中的final关键字
- java中的final关键字
- java中的final关键字
- JAVA中的final关键字
- java中的final关键字
- JAVA中的final关键字
- Java中的final关键字
- Java 中的关键字 final
- Java中的final关键字
- JSP总结
- 前端面试系列(一):网站优化的解决方案
- 版本控制SVN(二 安装)
- 点我达分布式任务调度系统
- 【BZOJ】1150 [CTSC2007]数据备份Backup 堆+链表
- Java中的Final关键字用法汇总及简单示例
- 程序变量存储空间
- codeforces849A
- 数据库索引
- EditText中setOnEditorActionListener方法的使用
- 反向传播算法(Back Propagation)
- 基于QEMU的ARM Cortex-A9开发板Vexpress-ca9的Linux内核的编译和运行
- 01背包问题 java实现
- <麦克白>读后感