对于原始类型,final使数值恒定不变,而用于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法对它进行改变以指向另一个对象。然而,对象其自身却是可以被修改的,Java并未提供使任何对象恒定不变的途径。(但你可以自己编写类以取得使对象恒定不变的效果。)这一限制同样适用数组,它也是对象。
下面是一个用以说明final数据成员的示例:
//: c06:FinalData.java
// The effect of final on fields.
import com.bruceeckel.simpletest.*;
import java.util.*;
class Value {
int i; // Package access
public Value(int i) {
this.i = i;
}
}
public class FinalData {
private static Test monitor = new Test();
private static Random rand = new Random();
private String id;
public FinalData(String id) {
this.id = id;
}
// Can be compile-time constants:
private final int VAL_ONE = 9;
private static final int VAL_TWO = 99;
// Typical public constant:
public static final int VAL_THREE = 39;
// Cannot be compile-time constants:
private final int i4 = rand.nextInt(20);
static final int i5 = rand.nextInt(20);
private Value v1 = new Value(11);
private final Value v2 = new Value(22);
private static final Value v3 = new Value(33);
// Arrays:
private final int[] a = { 1, 2, 3, 4, 5, 6 };
public String toString() {
return id + ": " + "i4 = " + i4 + ", i5 = " + i5;
}
public static void main(String[] args) {
FinalData fd1 = new FinalData("fd1");
// ! fd1.VAL_ONE++; // Error: can't change value
fd1.v2.i++; // Object isn't constant!
fd1.v1 = new Value(9); // OK -- not final
for (int i = 0; i < fd1.a.length; i++)
fd1.a[i]++; // Object isn't constant!
// ! fd1.v2 = new Value(0); // Error: Can't
// ! fd1.v3 = new Value(1); // change reference
// ! fd1.a = new int[3];
System.out.println(fd1);
System.out.println("Creating new FinalData");
FinalData fd2 = new FinalData("fd2");
System.out.println(fd1);
System.out.println(fd2);
monitor.expect(new String[] { "%% fd1: i4 = \\d+, i5 = \\d+",
"Creating new FinalData", "%% fd1: i4 = \\d+, i5 = \\d+",
"%% fd2: i4 = \\d+, i5 = \\d+" });
}
} // /:~
//: c06:BlankFinal.java
// "Blank" final fields.
class Poppet {
private int i;
Poppet(int ii) {
i = ii;
}
}
public class BlankFinal {
private final int i = 0; // Initialized final
private final int j; // Blank final
private final Poppet p; // Blank final reference
// Blank finals MUST be initialized in the constructor:
public BlankFinal() {
j = 1; // Initialize blank final
p = new Poppet(1); // Initialize blank final reference
}
public BlankFinal(int x) {
j = x; // Initialize blank final
p = new Poppet(x); // Initialize blank final reference
}
public static void main(String[] args) {
new BlankFinal();
new BlankFinal(47);
}
} // /:~
你被强制在数据成员的定义处或者是每个构造器中用表达式对final进行赋值。这正是final数据成员在使用前总是被初始化的原因所在。
分享到:
相关推荐
电话号码查询系统_final 数据结构课程设计是一个典型的计算机科学项目,主要目标是实现一个高效、用户友好的电话号码数据库。在数据结构课程设计中,学生通常会接触到如何利用各种数据结构来优化查询性能和存储效率...
《Final Data 3.0:数据恢复利器与硬盘数据恢复技术详解》 在数字化时代,数据的重要性不言而喻,而数据丢失往往带来极大的困扰。幸运的是,有这样一款工具——Final Data 3.0,被誉为硬盘数据恢复的神器,它在应对...
超级数据恢复工具的特性功能包括:支持FAT16/32和NTFS,... 另外,FinalData可以很容易地从格式化后的文件和被病毒破坏的文件恢复。甚至在极端的情况下,如果目录结构被部分破坏也可以恢复,只要数据仍然保存在硬盘上。
FinalData是一款知名的数据恢复软件,专门用于帮助用户在误删除、格式化或其他原因导致的数据丢失情况下,找回重要的文件和数据。这款工具凭借其强大的扫描功能和兼容性,被广泛应用于个人电脑用户和企业环境中。 ...
FinalData数据恢复
FinalData是一款专业的数据恢复软件,尤其擅长硬盘数据的恢复。这款工具因其强大的功能和用户友好的界面,在IT行业内被广泛使用。以下是对FinalData数据恢复和硬盘数据恢复相关知识点的详细解释: 1. **数据恢复的...
FinalData是一款强大的数据恢复软件,尤其在数据丢失或硬盘出现故障时,它能发挥至关重要的作用。本篇文章将深入探讨FinalData数据修复的核心原理、功能、使用方法以及注意事项。 一、FinalData概述 FinalData是由...
《final data 3.0 数据恢复工具深度解析》 在数字化时代,数据的重要性不言而喻,一旦丢失,可能会带来重大的损失。幸运的是,有了像"final data 3.0"这样的数据恢复软件,我们可以找回那些误删的宝贵资料。这款...
finalData是一款高效的数据恢复软件。FinalData可以很容易地从格式化后的文件和被病毒破坏的文件恢复。甚至在极端的情况下,如果目录结构被部分破坏也可以恢复,只要数据仍然保存在硬盘上。亲测,绝对好用,无限制。
FinalData是一款知名的数据恢复软件,尤其适用于在意外情况下如误删除、格式化或硬盘损坏时进行数据恢复。这款软件由Lsoft Technologies Inc开发,旨在帮助用户找回丢失的文件,包括文档、图片、视频、音频和其他...
FinalData是一款知名的数据恢复软件,尤其适用于在意外删除、格式化或系统崩溃等情况下找回丢失的文件。这个“免安装版本”意味着用户无需正式安装该软件到计算机上,可以直接运行程序进行数据恢复,方便快捷,尤其...
《使用FINALDATA恢复删除数据详解》 在日常的计算机使用过程中,误删文件的情况时有发生,一旦重要的数据被删除,如果没有及时备份,可能会造成重大损失。这时,数据恢复工具的作用就显现出来了,其中,FINALDATA是...
【标题】"acmicpc world final2017 数据"涉及的是ACM/ICPC(国际大学生程序设计竞赛)世界总决赛在2017年的比赛数据。这些数据是编程竞赛中用于测试和训练的重要资源,通常包括输入数据、输出数据以及可能的样例测试...
数据恢复FinalData 3.0绿色版是一款强大的数据恢复软件,专为用户解决因各种原因丢失数据的问题。FinalData以其高效、安全的特性在IT业界备受赞誉,它能够深度扫描硬盘,找出已删除、格式化或者丢失的文件,并尝试...
FinalData是一款专业级的数据恢复工具,它被广泛应用于找回丢失、误删或者格式化的数据。本篇将深入探讨FinalData的数据恢复原理、功能特性以及使用方法。 FinalData的主要工作原理基于文件系统的工作方式。在硬盘...
FinalData是一款强大的数据恢复软件,尤其适用于个人和企业用户,以恢复意外删除、格式化或丢失的数据。在本文中,我们将深入探讨FinalData 4.0的企业汉化特别版及其核心功能、工作原理以及如何使用它来恢复丢失的...
"FINALDATA"是一款知名的数据恢复软件,专为帮助用户找回丢失或删除的文件而设计。这款工具以其强大的扫描能力和对多种存储设备的支持,赢得了广大用户的信赖。 在计算机操作中,由于误删除、格式化、硬件故障、...
FinalData 使用这一项原则复原数据, 甚至那之后使再循环箱柜已经被倒空。 除此之外, FinalData 容易地能够复原划除文件和被病毒损害的硬盘数据或被意外的 格式。 甚至在极端的情况, 在目录结构被部份地损害的地方, ...