`
huangxx
  • 浏览: 321760 次
  • 来自: ...
社区版块
存档分类
最新评论

Java中 static/transient,final/volatile 说明

阅读更多

http://hi.baidu.com/jxliaom/blog/item/e9d5fd6d0bf6c3fe4316942b.html

 

你可以任意使用如下的修改限定关键字来定义一个字段:
final或者volatile和/或者static和/或者transient。

如果你将一个字段定义为final,编译器将确保字段当成一个常量——只读变量来初始化和处理。因为编译器知道常量是不变的,所以在程序的字节码中对其进行了内部优化。
如果你将一个字段声明为volatile,则多线程将能访问此字段,而特定的编译器将防止最优化以使该字段能被适当的访问。
如果你将一个字段定义为static,则所有对象都将共享此字段的一份拷贝。当你将一个新值赋给这个字段时,所有对象都将得到这个新值。如果没有指定为static,则这个字段将是一个实例字段,每个对象都使用他们自己的一份拷贝。
定义为transient的字段值在对象串行化过程中将不被保存。
实例字段
“实例字段”就是没有使用static修改标识符定义的字段。实例字段和对象紧密相连——而不是和类。当在一个对象代码里修改时,仅仅这个相关的类实例——对象——可以得到这个改变。实例字段随对象的创建而创建,随对象的释放而释放。
类字段
类字段是用static关键字定义的字段。类字段和类联系——而不是对象。当在一个类代码中修改时,这个类(以及所有创建的对象)都能感知这个变化。类字段随类的加载而创建,随类的卸载而释放
常量
“常量”是一种只读变量;当JVM初始化这种变量后,变量的值就不能改变了。
使用final关键字来定义常量。正如有两种字段——实例和类字段,常量也有两种——实例常量和类常量。为了提高效率,应当创建类常量,或者说是final static字段。
class Constants

{

final int FIRST = 1;

final static int SECOND = 2;



public static void main(String[] args)

{

int iteration = SECOND;



if (iteration == FIRST)//编译错误

System.out.println(“first iteration”);

else

if (iteration == SECOND)

System.out.println(“second iteration”);

}

}
 

上例中的Constants类定义了一对常量——FIRST和SECOND。FIRST是实例常量,因为JVM给每个Constants对象分配一份FIRST的拷贝。相反的,因为JVM在加载Constants类后只创建了一份SECOND拷贝,所以SECOND是类常量。
注意:当你尝试在main()中直接访问FIRST时会导致一个编译错误。常量FIRST直到一个对象创建时才存在,所以FIRST仅仅只能被这个对象所访问——而不是类。
分享到:
评论

相关推荐

    JAVA学习笔记.pdf

    其中,修饰符可以是static、final、transient、volatile等,类型是变量的数据类型,变量名是变量的名称,初始值是变量的默认值。 成员变量的修饰符有四种:static、final、transient、volatile。static表示成员变量...

    JAVA面向对象基础PPT教案学习.pptx

    * 变量声明格式:[public | protected | private] [static] [final] [transient] [volatile] 变量数据类型 变量名 1 [= 变量初值 ], 变量名 2 [= 变量初值 ], … ; * 访问控制符:public、protected、private * 变量...

    java中的关键字大全

    ### Java中的关键字大全 在Java编程语言中,关键字是一组预定义的词汇,它们具有特殊的含义和用途。理解和掌握这些关键字对于编写有效的Java程序至关重要。本文将详细介绍Java中的一些核心关键字,并提供相应的解释...

    2021年JAVA面向对象程序设计练习题库B.doc

    Java 中的 static 关键字是指当前对象的状态是静态的。在 Java 中,我们可以使用 static 关键字来定义对象的静态状态。 Java 中的 synchronized 关键字是指当前对象的状态是同步的。在 Java 中,我们可以使用 ...

    JAVA访问修饰符大归纳

    属性的访问修飾符共有八种:public、private、protected、默认、final、static、transient 和volatile。 * public:任何包、任何类都可以访问。 * private:只能被自身类访问。 * protected:自身类、子类、同一...

    java关键字总结文档

    在Java中,关键字具有特殊的语法含义,不能用作标识符(例如变量名或方法名)。以下是对给定文件中提到的Java关键字进行的详细解释与总结: #### 1. `abstract` - **用途**:`abstract`关键字用于声明抽象类或抽象...

    JAVA程序设计课件-变量.pptx

    下面我们将详细介绍Java中的变量、命名规范、关键字和运算符。 一、变量 在Java中,变量是用来存储数据的容器。变量有不同的数据类型,如整数、浮点数、字符等。变量的声明需要指定其数据类型和变量名。例如: ```...

    Java修饰符总结

    在Java中,某些修饰符可以组合使用,如`public static`、`protected final`等,以达到更精细的控制效果。例如,`public static`方法表示该方法是公共的且与类实例无关,而`protected final`变量则表示受保护的且不可...

    Java编程中常用修饰词使用方法

    Java 编程中常用修饰词使用方法 Java 语言中定义了 11 个常用的修饰词,每个修饰词都有其特定的使用场景和作用。下面对这 11 个 Java 修饰词进行详细的介绍: 1. public 修饰词 修饰对象:类、接口、成员 介绍:...

    java中的修饰符介绍

    本文将对几个常见的Java修饰符进行详细介绍,包括`public`、`private`、`protected`以及一些其他修饰符如`abstract`、`final`、`static`、`volatile`和`transient`等。 #### 1. `public` `public`修饰符是最常用的...

    Java面试要点(适用于2年以上经验,1年亦可)

    9. 熟悉 Java 中各种关键字:transient、instanceof、volatile、synchronized、final、static、const 集合类 1. ArrayList 和 LinkedList 和 Vector 的区别 2. SynchronizedList 和 Vector 的区别 3. HashMap、...

    Java修饰符详细解析

    在Java中,类修饰符有public、abstract、final三个。 1. public:公共的,可以从其他类中访问。 2. abstract:抽象的,不能被实例化,必须被继承。 3. final:最终的,不能再声明子类。 构造器修饰符 构造器修饰...

    java学习_java语法基础

    代替const的功能通常使用public static final,而goto则不存在于Java中。 浮点数计算的精度问题可以通过使用strictfp关键字来控制,它确保浮点计算遵循FP-strict规则,保证跨平台的数值一致性。另一方面,transient...

    java具体关键字和用法

    根据给定文件中的标题、描述、标签以及部分内容,本文将详细介绍Java中常用的关键字及其用法,这些知识点对于Java初学者来说非常重要。 ### 1. Abstract `abstract` 是 Java 中的一个关键字,用于声明抽象类或抽象...

    ITAT技能大赛预选JAVA试题.pdf

    9. Java内存管理和关键字:transient、finally、throw和static等关键字在Java中的作用,它们涉及对象序列化、异常处理、内存管理和类属性的不同方面。 10. Java图形用户界面组件:如ActionEvent、Button、MenuItem...

    SCJP java基础修饰符

    Java提供了10种基本修饰符,它们分别是`public`、`protected`、`private`、`final`、`abstract`、`static`、`native`、`transient`、`synchronized`和`volatile`。这些修饰符的应用范围和功能各不相同,下面将逐一...

    java关键字、标识符、注释

    - `public`, `private`, `protected`, `static`, `final`, `abstract`, `synchronized`, `volatile`, `transient`:这些关键字用于定义访问级别和修饰符。 - `try`, `catch`, `finally`, `throw`, `throws`:这些...

    计算机Java核心编程笔记

    Java修饰符包括public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native等。 七、Java流程控制 Java流程控制语句包括package、import、throw、throws、...

    java-打印.docx

    * 声明格式:[public | protected | private] [static][ final][transient] [volatile]变量数据类型 变量名 1[=变量初值], 变量名 2[=变量初值], … ; * 格式说明: + public、protected、private 为访问控制符 + ...

    计算机核心java编程笔记

    在 Java 语言中,标识符是为方法、变量或其他用户定义项所定义的名称。标识符可以有一个或多个字符。Java 语言中,标识符的构成规则如下: * 标识符由数字(0~9)、字母(A~Z 和 a~z)、美元符号($)、下划线(_)...

Global site tag (gtag.js) - Google Analytics