【Java基础】Java static静态变量分析

举报
gentle_zhou 发表于 2022/04/29 17:58:38 2022/04/29
【摘要】 只有在Main.a调用了这个静态变量进行+1操作之后,静态变量的值才真正的改变了

今天在学习java编程基础知识的时候,里面有一道题考的是静态变量。
image.png

刚看到这题,觉得幸福来得太突然,这题也太简单了,果断选答案为1,然后就错了。。。

看了答案为0之后,并不是太能理解,于是先去分析了一下static变量的概念。

“Static静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。当Java虚拟机(JVM)加载类时,就会执行该代码块。被static修饰的成员变量和成员方法独立于该类的任何对象。”

也就是说在class的开头申明的时候,static int a 为0。然后在modify()方法里,对传进来的参数a进行了+1操作,但是并没有影响static int a。只有当我们在modify() 方法里用了X.a++ 对静态变量对象进行+1操作之后,a的值才真正地进行了更新。

下面附上我的测试代码:

public class Main {
    private static int a;

    public static void main(String[] args) {
        System.out.println("2nd test " + a); 
        modify(a);
        System.out.println("5th test " + a);
        Main.a++;
        System.out.println("final test " + a);
    }

    public static void modify(int a) {
        System.out.println("3nd test " + a);
        a++;
        System.out.println("4th test " + a);
    }

    //编译的时候就来执行这一段了,所以Main.a 为5
    static {
        System.out.println("test " + a);
        Main.a = 5;
        System.out.println("1st test " + a);
    }  
}

得到的结果如下:
test 0
1st test 5
2nd test 5
3nd test 5
4th test 6
5th test 5
final test 6

从结果我们就可以看出来,在modify()方法里,a的值有改变,但是并没有改变static int a这个对象的值;只有在Main.a调用了这个静态变量进行+1操作之后,静态变量的值才真正的改变了,于是我们看到final test为6.

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。