Java-静态成员变量值到底能不能变?

Java-静态成员变量值到底能不能变?Java-静态成员变量值到底能不能变??

 博客原文迁移地址:Java静态变量到底能不能变?

程序代码::
public class AccessProperty {
	static int static_i = 6; // 定义静态成员变量
    int normal_i = 0;	

	public static void main(String[] args) {
		AccessProperty ap1 = new AccessProperty(); // 创建对象1
		AccessProperty ap2 = new AccessProperty(); // 创建对象2

        ap1.normal_i = 100; // 修改 ap1 的普通变量 normal_i 为 100

		ap2.static_i = 60; // 修改 ap2 的静态变量 static_i 为 60

		// 输出 ap1 数据
		System.out.println("第一个实例对象变量static_i:" + ap1.static_i); // 输出 60
		System.out.println("第一个实例对象变量normal_i:" + ap1.normal_i); // 输出 100

		// 输出 ap2 数据
		System.out.println("第二个实例对象变量static_i:" + ap2.static_i); // 输出 60
		System.out.println("第二个实例对象变量normal_i:" + ap2.normal_i); // 输出 0
	}
}

运行结果::

第一个实例对象变量static_i:60
第一个实例对象变量normal_i:100

第二个实例对象变量static_i:60
第二个实例对象变量normal_i:0

调用对象ap2赋值 static_i = 60 。可以发现,静态变量 static_i 的值不仅变了,ap1的 static_i  也跟着变了。而普通变量normal_i 却没有相同效果。

——————————————————分割———————————————————

 经过后续学习,对变量有了一定的理解。

java中变量主要分为:局部变量、成员变量,而成员变量又分为实例变量(普通变量)和类变量(静态变量)。

以作用范围从小到大讲解:

  1. 局部变量:在方法内部声明(定义)的变量,只在这个方法内部有效,出了这个方法就无法使用了,可以理解为销毁。比如代码中的 ap1 和 ap2 ,只在main方法中可用。
  2. 实例变量:成员变量中的实例变量,没有使用static关键字修饰的成员变量,如代码中的变量 normal_i ;他在每一个实例化的对象中都是独立的,每个对象修改其值后,只是修改他自己的这个变量 normal_i ,其他对象的 normal_i 不受影响。用底层的理解就是:每个对象的变量 normal_i 有独立的内存,他们互不影响。
  3. 类变量:成员变量中的类变量,是使用static关键字修饰的成员变量,如代码中的变量 static_i ;之所以叫做类变量,是因为这个类只有这一个变量 static_i  ,不管实例化多少个对象,他的 static_i  只有这一个,所以会出现一个对象修改了 static_i  的值后,其他对象的 static_i  也跟着变的现象。用底层的理解就是:所有这个类实例化的对象使用的变量 static_i  ,指向的是同一个内存。

以上便是java中基本变量的理解。对于新手来说,还是要多写代码,多去自己思考才能更好的理解。而底层理解,则需要一定程度的经验积累才能真正理解。

顺便说一下常量:使用final关键字修饰的变量就成为了常量。常量的值不可改变。所以如果使用在成员变量上,一般也会加上static关键字,实际工作中是最常见的用法了。如:

static final String version = “1.0.1”

总结:静态变量

使用static关键字修饰的变量,称为静态变量。静态变量的值是唯一的,不是不变的,在其作用范围内,只存在一个值,无论在作用域的哪里调用修改,改变的都是同一个内存地址。

拓展知识

虽然同一个静态变量始终指向唯一的内存,但是在高并发场景下,仍然有几率会出现问题,比如一个线程改变值,另一个线程获取值,假设两个线程同时执行,那么总要有个先后顺序,此时就没办法保证谁先谁后,有兴趣的同学可以去学习下这个问题如何解决,对理解多线程很好帮助哦~~

今天的文章Java-静态成员变量值到底能不能变?分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/12537.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注