一、final修饰符定义:
final关键字可用于修饰类、变量和方法
final修饰变量时,表示该变量一旦获得了初始值就不可被改变(严格来说:final修饰得变量不可被改变,一旦获得初始值,该final变量得值就不能被重新赋值)
final既可以修饰成员变量(类变量和实例变量),也可以修饰局部变量和形参
相关视频学习教程:java在线学习
二、final成员变量语法规定:
final修饰的成员变量必须由程序员显式地指定初始值,系统不会对final成员进行隐式处初始化。
1、final修饰的类变量、实例变量能制定初始值的地方如下:
类变量:必须在静态初始化块中指定初始值或声明该类变量时指定初始值,而且只能在两个地方的其中之一指定
实例变量:必须在非静态初始化块、声明该实例变量或构造器中指定初始值,而且只能在三个地方的其中之一指定
注意:如果普通初始化块已经为某个实例变量指定了初始值,则不能再在构造器中为该实例变量制定初始值
下面程序演示了final修饰成员变量的效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
|
2、如果打算在构造器、初始化块对final成员变量进行初始化,则不要在初始化之前就访问成员变量的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
三、final局部变量
1、定义:系统不会对局部变量进行初始化,局部变量必须由程序员显示初始化。因此使用final修饰局部变量时,既可以在定义时指定默认值,也可以不指定默认值。
下面程序示范了final修饰局部变量、形参:
(final修饰形参的情形,因为在调用该方法时,由系统根据传入的参数来完成初始化,因此使用final修饰符不能被赋值。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
四、final修饰基本类型变量和引用类型变量的区别
使用final修饰的引用类型变量不能被重新赋值,但可以改变引用类型变量所引用对象的内容
例如下面的iArr变量所引用的数组对象,final修饰后的iArr变量不能被重新赋值,但iArr所引用数组的数组元素可以被改变
1 2 3 4 5 6 7 8 9 10 11 12 |
|
五、可执行”宏替换“的final变量
1、对于一个final变量来说,不管它是类变量、实例变量,还是局部变量,只要该变量满足三个条件,这个final变量就不再是一个变量,而是相当于一个直接量。
(1)使用final修饰符修饰
(2)在定义该final变量时指定了初始值
(3)该初始值可以在编译时就被确定下来
2、final修饰符有一个重要用途就是定义”宏变量“。当定义final变量时就为该变量指定了初始值,而且该变量可以在变量时就确定下来,那么这个final变量本质上就是一个”宏变量“,编译器会把程序中所有用到该变量的地方直接替换成该变量的值。
3、
1 2 3 4 5 6 7 8 9 10 11 12 |
|
对于s3而言,它的值由str1和str2进行连接运算得到的,由于str1、str2只是两个普通变量,编译器不会执行”宏替换“,因此编译器无法确定s3的值,也就无法让s3指向字符串池中缓存的"疯狂Java"。
更多java相关文章教程可以访问:java入门教程
以上是java面向对象之final修饰符的详细内容。更多信息请关注PHP中文网其他相关文章!