Java中 static/transient,final/volatile 说明
来源:互联网 发布:传奇霸业武魂数据 编辑:程序博客网 时间:2024/05/18 00:25
你可以任意使用如下的修改限定关键字来定义一个字段:final或者volatile和/或者static和/或者transient。
如果你将一个字段定义为final,编译器将确保字段当成一个常量——只读变量来初始化和处理。因为编译器知道常量是不变的,所以在程序的字节码中对其进行了内部优化。
如果你将一个字段定义为final,编译器将确保字段当成一个常量——只读变量来初始化和处理。因为编译器知道常量是不变的,所以在程序的字节码中对其进行了内部优化。
class Employee
{
final int ACCOUNTANT = 1;
final int PAYROLL_CLERK = 2;
final int MANAGER = 3;
int jobID = ACCOUNTANT;
}
{
final int ACCOUNTANT = 1;
final int PAYROLL_CLERK = 2;
final int MANAGER = 3;
int jobID = ACCOUNTANT;
}
如果你将一个字段声明为volatile,则多线程将能访问此字段,而特定的编译器将防止最优化以使该字段能被适当的访问。
如果你将一个字段定义为static,则所有对象都将共享此字段的一份拷贝。当你将一个新值赋给这个字段时,所有对象都将得到这个新值。如果没有指定为static,则这个字段将是一个实例字段,每个对象都使用他们自己的一份拷贝。
定义为transient的字段值在对象串行化过程中将不被保存。
定义为transient的字段值在对象串行化过程中将不被保存。
实例字段
“实例字段”就是没有使用static修改标识符定义的字段。实例字段和对象紧密相连——而不是和类。当在一个对象代码里修改时,仅仅这个相关的类实例——对象——可以得到这个改变。实例字段随对象的创建而创建,随对象的释放而释放。
“实例字段”就是没有使用static修改标识符定义的字段。实例字段和对象紧密相连——而不是和类。当在一个对象代码里修改时,仅仅这个相关的类实例——对象——可以得到这个改变。实例字段随对象的创建而创建,随对象的释放而释放。
类字段
类字段是用static关键字定义的字段。类字段和类联系——而不是对象。当在一个类代码中修改时,这个类(以及所有创建的对象)都能感知这个变化。类字段随类的加载而创建,随类的卸载而释放
类字段是用static关键字定义的字段。类字段和类联系——而不是对象。当在一个类代码中修改时,这个类(以及所有创建的对象)都能感知这个变化。类字段随类的加载而创建,随类的卸载而释放
常量
“常量”是一种只读变量;当JVM初始化这种变量后,变量的值就不能改变了。
使用final关键字来定义常量。正如有两种字段——实例和类字段,常量也有两种——实例常量和类常量。为了提高效率,应当创建类常量,或者说是final 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”);
}
}
{
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中 static/transient,final/volatile 说明
- java中 static,final,transient,volatile关键字的作用
- java中 static,final,transient,volatile关键字的作用
- java中 static,final,transient,volatile关键字的作用
- java学习(1).static,volatile,transient,final等关键字
- java学习(2).static,`volatile`,transient,final等关键字
- static、final、transient [ Java ]
- java中transient、volatile、strictfp关键字说明
- Java开发--static,final,transient
- java四个关键字:transient, strictfp, volatile, final
- Java关键字之static、final、transient
- Java关键字static、final、transient详解
- Java中final、static
- 转载 java修饰符public final static abstract transient
- 【Java基础】java中常用关键字理解this、static、final、volatile理解
- Java Volatile transient
- Java volatile and transient
- Java Volatile transient 关键字
- 在ADSL条件下刷IP限制投票
- IDE Toolbox: 70+ IDEs for Developers
- 什么是java的守护线程
- 客户化FreeTextBox;汉化ImageGallery
- c将大写字母转换成小写字母
- Java中 static/transient,final/volatile 说明
- Active Directory扩展脚本的编写
- 回溯递归 (写给我的寝室长 曹旭)
- Undo/Redo框架的一种实现
- cadence中cell属性值的传递
- FLEX&BISON学习笔记(一:语法)
- 看书
- problem 1082
- FCKeditor 2.3 在ASP.NET中的设置和使用