1.修饰基础数据成员

这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰成常量,不可修改。

2.修饰类或者对象的引用的final

在java中我们无法让对象被修饰为final,只能修饰对象的引用。这意味着即使你写了public final A a = new A();事实上a指向的对象的数据依然可以被修改,不能修改的是a的引用值,即你不能再对a进行重赋值。同样的情况出现在数据组,比如 public final int[] a={1,2,3,4,5},事实上a的数值是可修改的,即可以a[0] = 6;。

3.修饰方法的final

修饰方法的final与C/C++中修饰成员对象的const大不相同。首先,修饰方法的final含义不是“不可修改”,而是指该方法不可以被继承成员重新定义。(这里的不能被重新定义,并不是指子类一定不能定义同名方法,如果父类的方法是私有类型,子类是允许定义该方法的,这里指的不能重新定义是指不能通过改写方法来使得方法重写的多态性得以实现,如不希望A a = new B(),a.f()这样的重写方法出现。)

 public class A {

     // final方法f

     public final void f() {

        System.out.println("类A中的final方法f被调用了");

     }

 }

 public class B extends A {

     // 编译错误!父类的f方法是final类型,不可重写!

     //! public void f() {

     //!     System.out.println("类B中的方法f被调用了");

     //! }

 }

此外,当一个方法被修饰为final方法时,意味着编译器可能将该方法用内联方式载入。所谓内联方式是指编译器不用像平常调用函数那样的方式来调用,而是直接将方法内的代码通过一定的修改后copy到源代码中(将方法主体直接插入到调用处,而不是调用方法),这样可以更快的执行

4.修饰类的final

当一个类被修饰为final时,它含义很明确,不允许该类被继承。

 public final class A {

 }

 // 编译错误!A是final类型,不可被继承!

 //!public class B extends A{

 //!}

5.参数final

对对象参数做final修饰,对象变量传递的是其引用,为防止调用过程中无意的更改而修饰。

6.static加final一块用

这两者放到一块可以简单理解为“全局常量”,对于变量,表示一旦给值就不能修改,可通过类名访问。对于方法,表示不可覆盖且可通过类名直接访问。

7.java允许空白final

所谓空白final是指被声明为final但又未给定初值的域。无论什么情况,编译器都确保空白final在使用前必须初始化。但是空白final在关键字final的使用上提供了更大的灵活性,为此,一个类中的final域就可以做到根据对象而有所不同,却又保持其恒定不变的特性。如:

 class Poppet{
private int i;
Poppet (int ii){
i = ii;
} pulic class BlankFinal{ private final int i = 0;//初始化final
private final int j; //空白final
private final Poppet p;//空白final引用 //空白final必须在构造器中初始化
public BlankFinal(){
j = 1;//初始化空白final
p = new Poppet(1);//初始化空白final引用
} public BlankFinal(int x){
j = x;//初始化空白final
p = new Poppet(x);//初始化空白final引用
} public static void main(String[] args){
new BlankFinal();
new BlankFinal(47);
}
}

必须在域的定义处或者每个构造器中用表达式对final进行填充,这正是final域在使用前总是被初始化的原因所在。

8.final和private关键字

类中所有private方法都隐式的指定为final。无法取用private,故无法覆盖它。

java中final用法的更多相关文章

  1. 转 Java中final、finally、finalize的区别与用法

    Java中final.finally.finalize的区别与用法   1.简单区别:final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承.finally是异常处理语句结构 ...

  2. Java中final修饰符深入研究

    一.开篇 本博客来自:http://www.cnblogs.com/yuananyun/ final修饰符是Java中比较简单常用的修饰符,同时也是一个被"误解"较多的修饰符.对很 ...

  3. 【Java面试题系列】:Java中final finally finalize的区别

    本篇为[Java面试题系列]第三篇,文中如有错误,欢迎指正. 第一篇链接:[Java面试题系列]:Java基础知识常见面试题汇总 第一篇 第二篇链接:[Java面试题系列]:Java基础知识常见面试题 ...

  4. Java中final的作用

    Java中Final可以被用于变量,方法,类.具体来说: 1, Final 变量 修饰主类型时,制定变量为常数,不希望被改变 修饰类类型时,表示变量的句柄不变,不能被指定指向新的变量 修饰参数时,参数 ...

  5. JAVA中ArrayList用法

    JAVA中ArrayList用法 2011-07-20 15:02:03|  分类: 计算机专业 |  标签:java  arraylist用法  |举报|字号 订阅     Java学习过程中做题时 ...

  6. 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因

    声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...

  7. java中final的意义

    1.如果一个数据既是static又是final,那么它会拥有一块无法改变的存储空间. 2.final data: 当final用于基本数据类型时,final让其值(value)保持不变,但是当用于ob ...

  8. this在java中的用法

    this在java中的用法 1.使用this关键字引用成员变量 作用:解决成员变量与参数或局部变量命名冲突的问题 public class Dog { String name; public Dog( ...

  9. Java中final,finally和finalize区别

    Day11_SHJavaTraing_4-18-2017 Java中final,finally和finalize区别 1.final—修饰符(关键字) ①final修饰类,表示该类不可被继承 ②fin ...

随机推荐

  1. perl FAQ(zz)

    1. Why do you write a program in Perl? Ans : Easy to use and fast execution since perl script underg ...

  2. 20145240 《Java程序设计》第二次实验报告

    20145240 <Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.12 实验 ...

  3. JSP Cookie状态管理

    JSP中创建与使用Cookie 创建Cookie对象 Cookie newCookie = new Cookie(String key, Object value); 写入Cookie对象 respo ...

  4. python安装包

    1. python常用包下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy numpy包下载地址:https://pypi.python.org ...

  5. HRBUST 2072 树上求最大异或路径值

    一个很经典的套路 思想是 F [u,v] = F[1,u] ^ F[1,v] 这样就转化成了n个数两两异或 求最大值 可以用字典树来做 每次用当前数去树中寻求最大xor值 然后把这个数字插进去 就相当 ...

  6. 6.0动态加载权限用PermissionGen

    ndroid 6.0 新增加了运行时的动态添加权限,在此介绍一个第三方库,PermissionGen,可以很方便简洁的增加 6.0权限 首先给大家上  PermissionGen 库地址:https: ...

  7. Java JDK、Tomcat、Eclipse环境配置

    Java 下载地址:http://www.oracle.com/ 根据提示一步一步进行安装,通常安装到C:\Program Files\Java,包含: 环境变量配置: JAVA_HOME:C:\Pr ...

  8. dtd和schema的区别

    在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 常用的约束技术XML DTD :XML Schema.XML Schema 也是一种用于定义和描述 XML 文档结 ...

  9. 反射+type类+Assembly+特性

    什么是元数据,什么是反射: 程序是用来处理数据的,文本和特性都是数据,而我们程序本身(类的定义和BLC中的类)这些也是数据. 有关程序及其类型的数据被称为元数据(metadata),它们保存在程序的程 ...

  10. .net core web发布到CentOS汇总

    直到今天我的博客终于可以见世人了,中间懒了很长一段时间,什么也没干,也没怎么学习,前段时间也是各种折腾,无心学习.本篇主要汇总下从一开始到现在遇到的问题汇总,作为学习笔记.我的博客就是我的学习笔记,因 ...