【Java】static静态属性声明和赋值问题
static静态属性声明和赋值问题
直接放结论,变量⼀定是先声明再赋值,⽆论是针对普通属性还是静态属性。
⼀个最简单的例⼦:
int i =1314;
在JVM虚拟机中实现的时候,是先声明变量属性 “i” 的存在,然后为它赋值1314。
我们再来写⼀个简单的含静态属性的类并声明两个对象:
class StuDent{
String name;
static int age;
public String getname(){
return this.name;
}
public static void Static(){
System.out.println("⼀个静态⽅法");
System.out.println(age);
}
}
StuDent s1 =new StuDent();
StuDent s2 =new StuDent();
static修饰的变量其中对象的静态属性的分布在内存中应该是如下图所⽰:
静态变量是在类初始化时是最先被加载的,JVM会去查类中所有的静态声明,然后分配空间,这时候只是完成了地址空间的分配,还没有赋值,之后JVM会根据类中静态赋值(包括静态类赋值和静态
块赋值)的先后顺序来执⾏。所以,当⼀个静态属性的地址被声明之后,它的内存地址的确定的,仅按照最后⼀次静态代码块的赋值来确定最终赋值。
下⾯再来举⼏个⽐较具体的例⼦:
static{
i =100;
}
public static int i =1;
public static int m =200;
static{
m =100;
}
main函数中输出i和m的值代码结果为1和100。所以我们可以很清晰地看出来,确实是按照最后⼀次静态代码块的赋值来确定最终值。此外,由于JVM会⾸先查类中的所有静态声明,所以即便是在第⼀个代码块中没有⾸先声明int变量属性i⽽是直接赋值,也不会报错,之后才是对它的具体赋值。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。