【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();

其中对象的静态属性的分布在内存中应该是如下图所示:
在这里插入图片描述

静态变量是在类初始化时是最先被加载的,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而是直接赋值,也不会报错,之后才是对它的具体赋值。

已标记关键词 清除标记
相关推荐
<p> <b><span style="background-color:#FFE500;">超实用课程内容</span></b> </p> <p> <br /> </p> <p> <br /> </p> <p> 本课程内容包含讲解<span>解读Nginx的基础知识,</span><span>解读Nginx的核心知识、带领学员进行</span>高并发环境下的Nginx性能优化实战,让学生能够快速将所学融合到企业应用中。 </p> <p> <br /> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><br /> </b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><span style="background-color:#FFE500;">课程如何观看?</span></b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> PC端:<a href="https://edu.csdn.net/course/detail/26277"><span id="__kindeditor_bookmark_start_21__"></span></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 移动端:CSDN 学院APP(注意不是CSDN APP哦) </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 本课程为录播课,课程永久有效观看时长,大家可以抓紧时间学习后一起讨论哦~ </p> <p style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <br /> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <strong><span style="background-color:#FFE500;">学员专享增值服务</span></strong> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b>源码开放</b> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 下载方式:电脑登录<a href="https://edu.csdn.net/course/detail/26277"></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a>,播放页面右侧点击课件进行资料打包下载 </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页