`

使用Java中的final变量需要注意的地方。

阅读更多

<!----> 

对与java中的final变量,java编译器是进行了优化的。每个使用了final类型变量的地方都不会通过连接而进行访问。比如说Test类中使用了Data类中一个final的int数字fNumber=77,这时候,java编译器会将77这个常数编译到Test类的指令码或者常量池中。这样,每次Test类用到fNumber的时候,不会通过引用连接到Data类中进行读取,而是直接使用自己保存在类文件中的副本。
用程序说话:
Test.java:

public class Test{
 public static void main(String[] args){
  System.out.println(Data.fNumber);
 }
}


Data.java:

public class Data{
 public static final int fNumber=77; 
}

执行命令和结果:

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\zangmeng>cd ..

C:\Documents and Settings>cd ..

C:\>javac Test.java

C:\>java Test
77

C:\>


这时候,我们更改Data.java的内容:
public class Data{
 public static final int fNumber=777; 
}

然后执行如下命令:

C:\>javac Data.java

C:\>java Test
77

C:\>

这里我们看到,虽然Data.java中的fNumber已经更改为777,而且已经重新编译了,但是因为编译器把fNumber的副本保存Test类中,所以在重新编译Test类的前,Test类一直把fNumber认为是77而不是777。下面我们变异Test.java,再执行,看看结果。

C:\>javac Test.java

C:\>java Test
777

C:\>
这时候,我们看到,重新编译的Test类将新的777数值封装到了自己类中。

整个过程如下:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\zangmeng>cd ..

C:\Documents and Settings>cd ..

C:\>javac Test.java

C:\>java Test
77
//在这里改变了Data.java的内容
C:\>javac Data.java

C:\>java Test
77

C:\>javac Test.java

C:\>java Test
777

C:\>

 

源自:深夜两点 (个人网站

分享到:
评论

相关推荐

    java final变量详解

    在变量中,final 变量只能被赋值一次,赋值后值不再改变。在方法中,final 方法不能被子类方法覆盖,但可以被继承。在类中,final 类不能被继承,没有子类,final 类中所有方法都是 final 的。 final 变量的内存...

    Java中final的深度剖析

    但需要注意,如果常量在多个文件中被使用,所有相关文件都需要重新编译以反映修改。 2. **方法内的常变量** final关键字也可以用于方法内的局部变量,这使得变量一旦初始化就不能再次赋值。例如: ```java ...

    java 常量与变量

    在Java中,我们可以使用关键字`final`来声明常量。例如: ```java final double PI = 3.14159; // 定义一个π的常量 ``` 在上述代码中,`PI`就是一个常量,它的值不能被改变。如果尝试修改常量的值,编译器会抛出...

    java中final和static的区别

    4. 用 private 修饰的 static 成员变量和成员方法,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用),但是不能在其他类中通过类名来直接引用,这一点很...

    java中final和static的总结

    4. **匿名内部类**:`final`可以应用于局部变量,以便在匿名内部类中使用。这是因为内部类会捕获封闭作用域中的变量的副本,而`final`确保变量在内部类中不可变。 接下来,我们讨论`static`关键字。`static`主要...

    Java关键字final、static使用总结

    在 Java 编程语言中,final 和 static 是两个非常重要的关键字,它们可以用来修饰类、方法、变量等,了解它们的使用方法和限制非常重要。本文将详细总结 final 和 static 的使用方法和限制。 一、final 关键字 ...

    Java中的final关键字

    在Java编程语言中,`final`关键字扮演着一个至关重要的角色,它被用来定义不可变性和唯一性。这个关键字可以应用于变量、方法和类,分别赋予它们不同的特性。以下是对`final`关键字在不同场景下使用的详细介绍: 1....

    局部变量用final的讨论

    2. **匿名内部类与final**:在Java中,如果一个局部变量要在匿名内部类中使用,那么它必须是`final`或effectively final(实际上相当于只赋值一次)。这是因为内部类可以访问外部类的final或effectively final变量,...

    深入理解Java中的final关键字_动力节点Java学院整理

    Java 中的 `final` 关键字是一个至关重要的概念,它被用来声明类、方法和变量,以确保它们在程序执行过程中不可更改。深入理解 `final` 关键字可以帮助开发者写出更加安全、高效的代码。 首先,`final` 关键字可以...

    java中final关键字和static关键字详细用法

    Java中的`final`和`static`关键字是编程中非常重要的两个修饰符,它们分别用于不同的场景,以确保代码的稳定性和高效性。 首先,`final`关键字主要用于表示不可变性。它可以用来修饰类、方法和变量。对于类,如果一...

    Java中final变量使用总结

    1. **final变量的声明** - 对于基本类型变量,如`int`、`double`等,一旦赋值,其值就不能更改。 ```java final double PI = 3.14; ``` - 对于对象引用,`final`变量只能指向一个对象,但对象内部的状态(非`...

    java成员变量覆盖问题

    需要注意的是,这种情况下并不是真正意义上的“重写”,因为Java中的成员变量不存在多态性。这意味着在子类中定义的同名成员变量不会影响父类中的成员变量,两者实际上表示不同的内存位置。 #### 示例代码分析 ...

    关于Java中final的深度剖析.pdf

    在Java中,final变量是一种常量,它的值不能被改变。final变量可以在编译时被初始化,也可以在运行时被初始化,但是一旦被初始化,final变量的值就不能被修改了。使用final变量可以提高代码的可读性和可维护性,因为...

    Java中final关键字的使用与注意总结

    Java中final关键字的使用与注意总结 Java中final关键字的使用与注意总结主要给大家介绍了关于Java中final关键字的相关资料,对大家的学习或者使用Java具有一定的参考学习价值。下面我们将详细介绍final关键字的...

    java中final与static的用法

    `final`关键字在Java中有多种用途,它可以用来修饰类、方法和变量,其主要目的是确保被修饰的对象具有不可变性或只读性。 #### 1. `final`修饰变量 当`final`用于修饰一个变量时,该变量成为常量,一旦赋值后就不...

    Java中final作用于变量、参数、方法及类该如何处理

    Java中的`final`关键字在编程中扮演着至关重要的角色,它用于确保代码的不可变性和确定性。在本文中,我们将深入探讨`final`在变量、参数、方法和类中的应用及其作用。 **1. `final`关键字用于变量** - **final...

    Java中final共2页.pdf.zip

    // 可以访问final变量 ``` 此外,`final`关键字在Java集合框架中也有特殊应用。例如,`final`数组可以与匿名内部类一起使用,因为它们在编译时被确定为常量。而`ArrayList`或`HashMap`等非`final`集合则无法直接在...

    ClassFinal-java class文件安全加密工具

    在实际使用中,开发者需要按照ClassFinal的文档指导,将源代码编译成class文件后,通过ClassFinal工具进行加密处理。处理后的class文件可以被正常的Java虚拟机(JVM)加载和执行,但对试图反编译或分析的人来说,会...

    javafinal和static总结.docx

    注意:在 Java 中,final 和 static 关键字可以组合使用,例如: `public static final int MY_CONSTANT = 100;` final 和 static 关键字在 Java 编程中扮演着重要的角色,正确使用它们可以提高代码的效率和可读性...

    Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释.doc

    - 当局部内部类需要访问所在方法的局部变量时,JVM会自动为这些局部变量创建副本,并存储在局部内部类的隐式成员变量中。 - 这一行为仅适用于final修饰的局部变量。 #### 示例分析 考虑以下代码示例: ```java ...

Global site tag (gtag.js) - Google Analytics