Java基础------知识点整理(四)-----final关键字
来源:互联网 发布:me544j支持什么网络 编辑:程序博客网 时间:2024/06/08 15:25
final通常指“这是无法改变的”,不想做改变可能处于两处理由:设计或效率,final可以当成是“最终版本”!
final能修饰三种情况: 数据(基本变量和对象)、方法、类
1.final数据
1.1 修饰的数据特点
(1)final修饰的常量必须是基本类型,此时final修饰的常量数值将恒定不变
(2)final修饰对象引用时,final仅仅使引用恒定不变,而不是使对象的值不变。也就是说,一旦被final修饰的引用被初始化指向一个对象后,就无法再把它改为指向另一个对象。 然而对象本身是可以修改的(java中没有使任何对象很定不变的途径),这一限制同样适用于数组,它也是对象
1.2static和final
static和final常常联合使用,例如private static final int VALUE_ONE = 99;
然而不加static只有final还是有点小的区别的,stati修饰后,在装载时就已经初始化,而不是每次创建对象时才初始化,此时static强调这个变量只有一份,final是说明它是一个常量
1.3 空白final
所谓空白final是指被final声明担忧为给定初值的域,但是编译器会确保空白final在使用前必须被初始化。但是空白final在关键字final的使用提供了更大的灵活性。
为了确保final定义的在使用前被初始化,空白final这种形式常用在 在构造函数进行初始化,例子如下:
class BlankFinal{ private final int j; private final Person p; public BlankFinal(){ j = 1; p = new Person(); } public BlankFinal(int x){ j = x; p = new Person(x);//加入类Person中有Person(int x)这样的构造函数 }}
这样就会发现使得final定义的更加灵活性,而且还能保证是final的
1.4 final 参数
final参数就是指在方法的参数列表中,将参数指定为final,这样的目的是:你无法在方法中更改参数引用所指向的对象
class Gizmo{ public void spin(){}}public class FinalArguments{ void with(final Gizmo g){ // ! g = new Gizmo() 不可以,因为g是final的 } void without(Gizmo g){ g = new Gizmo(); g.spin(); }}
2 final方法
final修饰的方法,在被继承后不会被覆盖;
有些类中的方法是很底层的需要固定住,不能改变。但假如子类继承过来后,不故意也有一个同名的函数就可能改变原来的方法将其覆盖,所以用final修饰
在以前用final还因为可以提高效率
2.1 final和private关键字
类中所有的private方法都算是隐式的定义为final的,由于无法取用private方法,所以也就无法覆盖它
3.final类
有些类不想被继承,就用final修饰
4有关final的忠告
(1)在设计类时,讲方法指明是final是明智的
(2)Vector和Hashtab里面的方法都没有final修饰
- Java基础------知识点整理(四)-----final关键字
- Java基础: 关键字 final
- final关键字 -----JAVA基础-------
- Java基础----final关键字
- [Java基础] final关键字
- java基础-final关键字
- java基础--final关键字
- JAVA 基础 final关键字
- [java基础]final关键字
- Java基础--final关键字
- Java基础---final关键字
- java基础-final关键字
- Java入门(四)final关键字
- Java面向对象(四)final关键字
- Java知识点整理:第七章:static关键字、final关键字、抽象类 、接口、Object类
- Java 基础之(六) final关键字
- java基础之final关键字
- Java基础—关键字final
- lintcode: Longest Common Prefix
- eclipse和myeclipse编辑器中代码 “ import="java.sql.* " 报错的解决方案
- thread 退出状态如何获取
- windows(win7,win8,xp)hosts文件找不到原因分析及解决方法
- Android ProgressBar 样式大全
- Java基础------知识点整理(四)-----final关键字
- 迷宫
- hdu1242
- Disruptor:为什么会这么快?(三)揭秘内存屏障
- 趣味编程 - 蛇形数
- C++ 第二次上机实验(作业)
- 深入理解C指针学习笔记之常量和指针(六)
- CentOS7自动联网以及IP配置
- android自定义View(一):扩展方式(继承)带有预置数据 和 删除键的自定义EditText