java 中为final 变量赋值的⼏种⽅式
java 中为final 变量赋值的⼏种⽅式
前⾔
使⽤final修饰变量,很多⼈第⼀时间想到的就是不可变。然后以为变量必须得在声明的时候就为其赋初始值,其实不然,本⽂将详细讲解java中使⽤final修改的变量的赋值问题。
被final 修饰的变量的⼏种赋值⽅式
1、被final修饰的变量有三种赋值⽅式。
2、被final static修饰的变量有两种赋值⽅式。
储备知识:在类的加载中,类的加载顺序我们应该都知道,静态代码块->构造代码块->构造⽅法
精华:
当类被加载进内存的时候,这个属性只是声明了⼀个变量,并没有给分配内存空间,只有当类在被实例化的时候才分配了内存空间,⽽这个时候⼜同时执⾏了构造⽅法, 所以属性被初始化了,也就符合了当
static修饰的变量它被分配内存空间的时候就需要实例化,以后不在改变的条件。
被final 修饰的变量
1、在定义时直接赋值
2、声明时不赋值,在构造⽅法中进⾏赋值
3、声明时不赋值,在构造代码块中进⾏赋值
当你发现⼀个类的变量被final修饰但没被赋值,那么可以判断出它肯定会在构造函数⾥被赋值。(因为倘若是set⽅法赋值,线程是不安全的,因为set⽅法可以被调⽤多次,⽽final变量只能被赋值⼀次)
被final static 修饰的变量
1、在定义时直接赋值public class Test { public final String str = "mark";}
1
2
3public class Test { public final String str ; public Test () { this .str = "mark"; }}
1
2
3
45
6
7public class Test { public final String str ; { this .str = "mark"; }}
1
2
3
4
5
6
7
2、在静态代码块⾥⾯进⾏赋值
final变量会经过jvm进⾏优化,所以平时使⽤过程中建议使⽤final来修饰变量。public class Test { public static final String str = "mark"; }
1
2
3
4public class Test { public static final String str ; static { str = "mark"; }}
1
2
3
4
5
6
7
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论