可能使用final的三种情况:数据、方法、类。

1.final数据

final 常量必须是基本类型数据,且在定义时须赋值;

一个既是static又是final的域只占据一段不能改变的存储空间,只有一份;(使用全大写字母命名)

当用于对象引用,final使引用只能指向一个对象(实例化一次)。对象本身可以修改。

package chapter7;

import java.util.Random;

/**
* final数据
*/
class Value {
int i; public Value(int i) {
this.i = i;
}
} public class FinalData {
private static Random rand = new Random();
private String id; public FinalData(String id) {
this.id = id;
} private final int valueOne = ;
private static final int VALUE_TWO = ;
public static final int VALUE_THREE = ; private final int i4 = rand.nextInt();
static final int INT_5 = rand.nextInt(); private Value v1 = new Value();
private final Value v2 = new Value();
private static final Value VAL_3 = new Value(); private final int[] a = { , , , , , }; public String toString() {
return id + ": " + "i4 = " + i4 + ",INT_5 = " + INT_5;
} public static void main(String[] args) {
FinalData fd1 = new FinalData("fd1");
// fd1.valueOne++;
fd1.v2.i++;
fd1.v1 = new Value();
for (int i = ; i < fd1.a.length; i++)
fd1.a[i]++;
// !fd1.v2=new Value(0);
// !fd1.VAL_3=new Value(1);
// !fd1.a=new int[3];
System.out.println(fd1);
System.out.println("Creating new FinalData");
FinalData fd2 = new FinalData("fd2");
System.out.println(fd2);
}
}

【运行结果】:
fd1: i4 = 15,INT_5 = 18
Creating new FinalData
fd2: i4 = 13,INT_5 = 18

final与static final的区别是:final在一个对象类唯一,static final在多个对象中都唯一。

空白final

需在构造函数中对final赋值

package chapter7;

import java.awt.PageAttributes;

/**
* 空白final
*/
class Poppet {
private int i; Poppet(int ii) {
i = ii;
}
} public class BlankFinal {
private final int i = ;
private final int j;
private final Poppet p; public BlankFinal() {
j = ;
p = new Poppet();
} public BlankFinal(int x) {
j = x;
p = new Poppet(x);
} public static void main(String[] args) {
new BlankFinal();
new BlankFinal();
}
}

final方法

要明确禁止覆盖时,才将方法设置为final;

若基类中方法为private时,该方法不是接口的一部分,仅是隐藏于类中的代码。

下面的例子证明,基类中方法为private,导出类中以相同名称生成public等方法,并没有覆盖基类中的方法。

package chapter7;

class WithFinal {
private final void f() {
System.out.println("WithFinal f()");
} private final void g() {
System.out.println("WithFinal g()");
}
} class OverridingPrivate extends WithFinal {
private final void f() {
System.out.println("OverridingPrivate f()");
} private final void g() {
System.out.println("OverridingPrivate g()");
}
} class OverridingPrivate2 extends OverridingPrivate {
public final void f() {
System.out.println("OverridingPrivate2 f()");
} public final void g() {
System.out.println("OverridingPrivate2 g()");
}
} public class FinalOverridIllusion {
public static void main(String[] args) {
OverridingPrivate2 op2 = new OverridingPrivate2();
op2.f();
op2.g();
OverridingPrivate op = op2;
// !op.f();
// !o2.g();
WithFinal wf = op2;
// !wf.f();
// !wf.g();
}
}

【运行结果】:
OverridingPrivate2 f()
OverridingPrivate2 g()

final类

不能继承该类

(五)《Java编程思想》——final关键字的更多相关文章

  1. 《Java编程思想》读书笔记(五)

    前言:本文是<Java编程思想>读书笔记系列的最后一章,本章的内容很多,需要细读慢慢去理解,文中的示例最好在自己电脑上多运行几次,相关示例完整代码放在码云上了,码云地址:https://g ...

  2. 《java编程思想》读书笔记(一)开篇&第五章(1)

    2017 ---新篇章  今天终于找到阅读<java编程思想>这本书方法了,表示打开了一个新世界. 第一章:对象导论 内容不多但也有20页,主要是对整本书的一个概括.因为已经有过完整JAV ...

  3. JAVA编程思想读书笔记(五)--多线程

    接上篇JAVA编程思想读书笔记(四)--对象的克隆 No1: daemon Thread(守护线程) 参考http://blog.csdn.net/pony_maggie/article/detail ...

  4. 关于 java编程思想第五版 《On Java 8》

    On Java 8中文版 英雄召集令 这是该项目的GITHUB地址:https://github.com/LingCoder/OnJava8 广招天下英雄,为开源奉献!让我们一起来完成这本书的翻译吧! ...

  5. Java编程思想 (1~10)

    [注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第一章 对象导论 1.万物皆对象2.程序就是对象的集合3.每个对象都是由其它对象所构成 ...

  6. Java编程思想(前十章)

    Java编程思想 有C++编程基础的条件下, 前10章可以快速过一下,都是基本语法,不需要花太多时间. 着重中后段的一些章节,类型信息.泛型.容器.IO.并发等. 中文翻译版 阅读地址 对于一个架构师 ...

  7. 《Java编程思想》阅读笔记二

    Java编程思想 这是一个通过对<Java编程思想>(Think in java)进行阅读同时对java内容查漏补缺的系列.一些基础的知识不会被罗列出来,这里只会列出一些程序员经常会忽略或 ...

  8. JAVA编程思想——分析阅读

    需要源码.JDK1.6 .编码风格参考阿里java规约 7/12开始 有点意识到自己喜欢理论大而泛的模糊知识的学习,而不喜欢实践和细节的打磨,是因为粗心浮躁导致的么? cron表达式使用 设计能力.领 ...

  9. 《Java编程思想》读书笔记(二)

    三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第一章到第十章的内容,这一次记录的是第 ...

  10. #Java编程思想笔记(一)——static

    Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...

随机推荐

  1. Jason 分享吴霁虹教授的产品模型

    产品的出现都是为了解决市场上存在的某一个”疼点“或一系列的”疼点“而出现. 疼点:是一个亟需待解决的问题,对应有相应的市场,会寻找相应的解决方案.比如:用户的小孩——>因为缺钱,所以担心小孩无法 ...

  2. 传输层-TCP

    UDP协议提供了端到端之间的通讯,应用程序只需要在系统中监听一个端口,便可以进行网络通讯.随着计算机网络的发展,计算机网络所承载的业务越来越多,有些业务数据的传输需要具备可靠性,譬如我们在进行在线聊天 ...

  3. C++拾遗(九)类与动态内存分配(1)

    创建类时编译器自动生成以下成员函数(如果用户没有定义): 1.默认构造函数 2.拷贝构造函数 3.赋值操作符 4.默认析构函数 5.地址操作符 以下一一说明: 构造函数 构造函数在创建对象时被调用. ...

  4. 你好,C++(29)脚踏两只船的函数不是好函数 5.4 函数设计的基本规则

    5.4  函数设计的基本规则 函数是C++程序的基本功能单元,就像一块块砖头可以有规则地垒成一座房子,而一个个函数也可以有规则地组织成一个程序.我们在大量使用他人设计好的函数的同时,也在设计大量的函数 ...

  5. 如何启动Service,如何停用Service(转)

    如何启用Service,如何停用Service Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发现,可以使用它开发如监控之类的程序.服 ...

  6. Nginx并发访问优化

    Nginx反向代理并发能力的强弱,直接影响到系统的稳定性.安装Nginx过程,默认配置并不涉及到过多的并发参数,作为产品运行,不得不考虑这些因素.Nginx作为产品运行,官方建议部署到Linux64位 ...

  7. swf上传

    swfupload多文件异步上传 多文件选择异步上传的原理 传统上:多个文件逐一选.PHP开始处理,循环上 PHP+Flash上:JS调用flash控,Flash批量选取并保持选取所有文件列 swfu ...

  8. Python入门100例题

    原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/11/05/2755107.html 无论学习哪门计算机语言,只要把100例中绝大部分题目都做一遍, ...

  9. .SO 出现 undefined reference

    查看本SO文件依赖哪些其他的SO文件: readelf -d ldd undefined reference 涉及的问题是  主程序及静态库不能定位地址 undefined symbol 说的问题是动 ...

  10. 详解ios文件系统文件目录读写操作-备用

    iPhone文件读写系统操作教程是本文要介绍的内容,对于一个运行在iPhone得app,它只能访问自己根目录下得一些文件(所谓sandbox).一个app发布到iPhone上后,它得目录结构如下:  ...