可能使用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. WDCP控制面板安装卸载

    安装 安装源码 WDCP提供两种安装模式,一种是源码安装,一种是RPM包安装,众所周知,源码安装虽然安装时要比RPM包安装繁琐,但是使用上要节省内存.所以我这里主要介绍源码安装. 首先是下载安装源代码 ...

  2. Css3 javascript 写的分类

    不兼容IE10以下的浏览器 <!DOCTYPE html> <html> <head> <meta charset=utf-> <title> ...

  3. ubuntu下 使用AB做压力测试

    1最近刚开始接触apache大数据下数据优化,讲一下apache 下ab压力测试工具. 程序“ab”尚未安装. 您可以使用以下命令安装: apt-get install apache2-utils 以 ...

  4. 一些不太常用的Linux命令

    ACCTCOM 查看所有用户执行过的进程 acctcom | tail - 查看指定用户执行过的进程/命令 acctcom -u <username> | tail - 使用一个正则表达式 ...

  5. mysql 索引管理原则

    最近在学习mysql的索引优化,结合着我们网盟系统的一些业务,翻阅一些资料,整理出如下的一些想法: 1.索引建立的原则一:最左前缀匹配原则 ,非常重要的原则,mysql会一直向右匹配直到遇到范围查询( ...

  6. winform中WebBrowser控件执行脚本

    在实际应用中我们可能需要WebBrowser控件主动执行我们需要的脚本,执行脚本现在有两种方法. 1.WebBrowser控件加载脚本,简单方便,适用于简短的脚本,无法执行复杂操作. webBrows ...

  7. MLlib 卡方检验

    1.卡方检验理论 1.1.  简介 总体的分布函数完全未知或只知形式.但不知其参数的情况,为了推断总体的某些未知特性,提出某些关于总体的假设.我们要根据样本对所提出的假设作出是接受,还是拒绝的决策.假 ...

  8. Entity Framework with MySQL 学习笔记一(继承)

    基本上sql中要表示继承关系有3中方式. 分别是,1表继承(TPH),2表继承(TPC),3表继承(TPT) 1表 : Person id type name classroom office 1 s ...

  9. cf B. Fox Dividing Cheese

    http://codeforces.com/contest/371/problem/B #include <cstdio> #include <iostream> #inclu ...

  10. 当DOCKER遇上ESXI

    特别是你要为DOCKER窗口设置静态IP,且和公司局域网打成一片的时候, 苦逼的测试就会开始,我差不多前前后后测试了四五天,一百多个容器报废. NETNS,NSENTER,PIPWORK,各种镜像合下 ...