快速业务通道

Java关键字介绍之final - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
前面加上final关键字,那便是说,这个变量一旦被初始化 便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 用不可再变。然而,对象其本身却是可以被修改的,Java并未提供使任何对象恒定不变的途 径。这一限制同样适合数组,它也是对象。

示例2

private final int VAL_ONE=9; private static final int VAL_TWO=99; public static final int VAL_THREE=999;

由于VAL_ONE 和VAL_TOW 是带有编译期数值的final 原始类型,所以它们二者均可以用作 编译期常量,并且没有重大区别。VAL_THREE是一种更加典型的对常量进行定义的方式:定义 为 public,则可以被用于包之外;定义为 static 来强调只有一份;定义为 final 来说明 它是一个常量。

Java关键字介绍之final(3)

时间:2011-04-13 51cto hangjunhd

final标记的变量即成为常量,但这个“常量”也只能在这个类的内部使用,不能在类的 外部直接使用。但是当我们用public static final 共同标记常量时,这个常量就成为全局 的常量(一个既是static又是final的字段只占据一段不能改变的存储空间)。而且这样定义 的常量只能在定义时赋值,其他地方都不行。

示例3

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 i4 = rand.nextInt(20);    static final int i5 = rand.nextInt(20);    public String toString() {     return id + ":" + "i4:" + i4 + ", i5=" + i5;    }    public static void main(String[] args) {     FinalData fd1 = new FinalData("fd1");     System.out.println(fd1);     System.out.println("Creating new FinalData");     FinalData fd2 = new FinalData("fd2");     System.out.println(fd1);     System.out.println(fd2);    } }

结果

fd1:i4:6, i5=3 Creating new FinalData fd1:i4:6, i5=3 fd2:i4:17, i5=3

示例部分展示了将final 数值定义为static(i5) 和非static(i4) 的区别。此区别只 有在数值在运行期内被初始化时才会显现,这是因为编译器对编译期数值一视同仁。(并且 它们可能因优化而消失。)当你运行程序时,就会看到这个区别。请注意,在fd1 和fd2 中 , i5 的值是不可以通过创建第二个FinalData 对象而加以改变的。这是因为它是 static, 在装载时已被初始化,而不是每次创建新对象时都初始化。

示例4

class Value {    int i;    public Value(int i) {     this.i = i;    } } public class … {    private Value v1=new Value(11);    private final Value v2=new Value(22);    private static final Value v3=new Value(33);   … } public static void main(String[] args) {    …    fd1.v2.i++;// OK--Object isn''t constant!    fd1.v1=new Value(9);//OK--not final    fd1.v2=new Value(0);//Error:Can''t change reference    fd1.v3=new Value(1);//Error:Can''t change reference    … }

Java关键字介绍之final(4)

时间:2011-04-13 51cto hangjunhd

从v1 到v3 的变量说明了final 引用的意义。正如你在main( )中所看到的,不能因为v2 是final 的,就认为你无法改变它的值。由于它是一个引用,final 意味着你无法将v2 再次 指向另一个新的对象。

示例

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号