Java中的final
来源:互联网 发布:淘宝电子面单打印软件 编辑:程序博客网 时间:2024/06/11 18:46
Java中的final
英语阅读中,final常被译为”最终的”。在Java中,另一种解释更合乎语境:”不能更改的”。即,被final修饰了的都是不能再改的。
final可以修饰数据、方法和类。
final修饰数据
1 final修饰基本数据类型,定义时必须赋值。如:
private final int value=9;public void change(){ value=10; //Error:can't change it}
与static的区别:static强调该类所有对象都共享这一份数据,数据是可以改变的;final强调该数据不能再改变。
private static int value=9;public void change(){ value=10; //OK}
2 final修饰对象引用,引用不可再改变,对象本身可以改变。如:
private final int[] a={1,2,3,4};public void changeObject(){ a[0]=7; //ok,change the object}public void changeReference(){ a=new int[3]; //Error,can't change reference}
3 一个有趣的现象是,Java允许空白final的存在,这似乎与前面所说的定义时必须赋值矛盾。所以,更正为使用前必须初始化完毕更为准确。空白final为程序带来了更大的灵活性。而编译器是可以保证空白final在使用前必须初始化的,因为我们总会在定义处或构造器中完成初始化。
public class TestFinal { private final int i; public TestFinal(){ i=0; System.out.println("TestFinal("+i+")"); } public TestFinal(int value){ i=value; System.out.println("TestFinal("+i+")"); } public static void main(String args[]){ TestFinal t1=new TestFinal(); TestFinal t2=new TestFinal(3); }}
4 final修饰参数,意味着不能在方法中改变该参数。如:
public void change(final int[] a){ a[0]=7; //OK a=new int[8]; //Error,can't change}
final修饰方法
1 方法需要final修饰,通常出于两个考虑:
设计:锁定方法,防止派生类修改。
效率:早期Java中,被final修饰的方法,意味着编译器对该方法的调用都转为内嵌调用。但内嵌调用可能会带来程序代码膨胀的后果,反而会影响效率。因此,后期的Java中,final只用来禁止覆盖。
2 final和private
其实,类中所有的private方法都是被隐式地指定为final的,由于无法获取private方法,也就没有办法覆盖它。因此,对某个private方法增加final修饰,并不会带来额外的意义。
final修饰类
final修饰类,表示不允许继承该类,也不允许对该类有任何改动。
final类中的域与非final类中的域规则一样;final类中的方法被隐式指定为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变量
- java中的final关键字
- JAVA中的final
- 关于Java中的final
- 关于Java中的final
- java中的final
- 关于Java中的final
- GCC分步编译和编译动态链接库和静态链接库
- 算法设计之流水作业调度问题Johnson算法结论
- 黑马day02 http协议详解
- Eclipse maven 配置 第三方maven插件
- Android---Handling Runtime Changes
- Java中的final
- Struts学习笔记之快速上手
- 排列组合 求一个字符串的排列
- 实验第三方的内存泄露检测工具VLD(Visual Leak Detector)
- Java接口、抽象类、继承
- 奇异值分解SVD在简单推荐系统中的应用
- 解决 input密码框自动填充
- shell编程中 read export echo 理解
- 【JavaScript】单击网页任意一处打开新窗口与关闭窗口