SCJP认证 1.5.4(4) 变量声明
2011-02-28 01:08
225 查看
final变量
用final关键字声明的变量,将使该变量一旦被一个现实值初始化之后,就不可能再被重新初始化了(注意,用的是“显式值”而不是“默认值”)。
对于节本类型,这意味着变量一旦赋值,该值就不能在改变。例如,如果将10赋予int变量x,则x将永远保持为10.对基本类型而言就这么简单,但是final对象引用变量表示什么意思呢?
标识为final的引用变量永远不能被重新赋值来引用一个不同的对象。虽然可以修改该对象理的数据,但不能改变引用变量。换句话说,final引用仍然允许修改它所引用的对象的状态,但是不能够修改应用变量,是它引用不同个的对象。简而言之:不存在fianl对象,只存在fianl引用。
至此,已经介绍了final修饰符如何应用于类、方法和变量,图总结了final的一些关键点以及各种应用的差异。
transient变量
如果将实例变量标识为transient(瞬态的) 则是在告诉JVM,当时如序列化包含这个变量的对象时应跳过(忽略它)。序列化是Java最酷的功能之一,他通过将对性爱那个的状态(也就是它的实例变量的值)写入特殊类型的I/O流来保存(有时称作“扁平化”)对象。利用序列化,可以将对象保存到文件中,甚至可以通过网络将它传递到另一端,在另一个JVM中进行再膨胀(反序列化)。从Java5起,已经将序列化添加到考试,第六章家工作更详细的介绍。
volatile变量
volatile修饰符刚告诉JVM,访问该变量的线程必须总是使自己对该变量的私有副本与内存中的主副本保持一致。居然这样?不必担心。对于考试,与transient的用法类似,需要了解的关于volatile的所有内容就是它只能用于实例变量。别搞错,多个线程访问一个实例变量这种想法是很可怕,Javavhengxuyuan理解这一点很重要。但是,正如江第9章中所看到的,你很可能将使用同步而不是volatile修饰符来保证数据是线程安全的。
静态变量和静态方法
static修饰符创建静态变量和静态方法,它们独立于为类而创建的任何实例。
所有的static成员存在于创建类的一个新实例之前,并且无论类有多少个实例,static成员都只有一个副本。换句话说,给定类的所有实例都共享任何给定的static变量的相同值。下一章将更详细地介绍static成员。
可以被标识为static的有:
方法。
变量。
嵌套在另一个类(而不是方法) 内的类(第八章将更详细介绍嵌套类)。
初始化块。
不可以被标识的static的有:
构造函数
类(除了是嵌套类) 。
接口。
方法的局部内部类(将在第8章介绍)。
内部类方法和实例变量。
局部变量。
用final关键字声明的变量,将使该变量一旦被一个现实值初始化之后,就不可能再被重新初始化了(注意,用的是“显式值”而不是“默认值”)。
对于节本类型,这意味着变量一旦赋值,该值就不能在改变。例如,如果将10赋予int变量x,则x将永远保持为10.对基本类型而言就这么简单,但是final对象引用变量表示什么意思呢?
标识为final的引用变量永远不能被重新赋值来引用一个不同的对象。虽然可以修改该对象理的数据,但不能改变引用变量。换句话说,final引用仍然允许修改它所引用的对象的状态,但是不能够修改应用变量,是它引用不同个的对象。简而言之:不存在fianl对象,只存在fianl引用。
至此,已经介绍了final修饰符如何应用于类、方法和变量,图总结了final的一些关键点以及各种应用的差异。
transient变量
如果将实例变量标识为transient(瞬态的) 则是在告诉JVM,当时如序列化包含这个变量的对象时应跳过(忽略它)。序列化是Java最酷的功能之一,他通过将对性爱那个的状态(也就是它的实例变量的值)写入特殊类型的I/O流来保存(有时称作“扁平化”)对象。利用序列化,可以将对象保存到文件中,甚至可以通过网络将它传递到另一端,在另一个JVM中进行再膨胀(反序列化)。从Java5起,已经将序列化添加到考试,第六章家工作更详细的介绍。
volatile变量
volatile修饰符刚告诉JVM,访问该变量的线程必须总是使自己对该变量的私有副本与内存中的主副本保持一致。居然这样?不必担心。对于考试,与transient的用法类似,需要了解的关于volatile的所有内容就是它只能用于实例变量。别搞错,多个线程访问一个实例变量这种想法是很可怕,Javavhengxuyuan理解这一点很重要。但是,正如江第9章中所看到的,你很可能将使用同步而不是volatile修饰符来保证数据是线程安全的。
实际应用 Volatile修饰符也可能适合于项目经理——此时它应理解成“反复无常”。 |
static修饰符创建静态变量和静态方法,它们独立于为类而创建的任何实例。
所有的static成员存在于创建类的一个新实例之前,并且无论类有多少个实例,static成员都只有一个副本。换句话说,给定类的所有实例都共享任何给定的static变量的相同值。下一章将更详细地介绍static成员。
可以被标识为static的有:
方法。
变量。
嵌套在另一个类(而不是方法) 内的类(第八章将更详细介绍嵌套类)。
初始化块。
不可以被标识的static的有:
构造函数
类(除了是嵌套类) 。
接口。
方法的局部内部类(将在第8章介绍)。
内部类方法和实例变量。
局部变量。
相关文章推荐
- SCJP认证 1.5.4(1) 变量声明
- SCJP认证 1.5.4 (2) 变量声明
- SCJP认证 1.5.4(3) 变量声明
- SCJP认证范围 1.4 声明接口
- SCJP认证 2.5 引用变量强制转换(1)
- SCJP认证 1.5.5 声明枚举(1)
- SCJP认证 1.7小结(声明访问控制)
- SCJP认证 1.5.3 (1)构造函数声明
- C语言变量声明加冒号的用法
- C语言中变量的定义和声明
- [译】顺时针分析规则 —— 一种针对复杂变量声明的分析的方法(尤其是指针类型)
- 变量声明关键字var、let、const
- LCC编译器的源程序分析(17)参数变量的声明
- 变量的定义与声明
- 编译原理——变量声明语句(三)
- LCC编译器的源程序分析(21)局部变量的声明
- 全局变量的正确声明
- 不同存储类型的变量的声明、内部函数、外部函数
- 变量.注意内部链接全局变量(也声明使用静态关键字)
- switch case里声明变量的问题