怎样使单个静态变量被所有实例共享?

在定义一个类时,只是在描述某类事物的特征和行为,并没有产生具体的数据。只有通过new关键字创建该类的实例对象后,系统才会为每个对象分配内存空间,存储各自的数据。有时候,开发人员会希望某些特定的数据在内存中只有一份,而且能够被一个类的所有实例对象所共享。例如某个学校所有学生共享同一个学校名称,此时完全不必在每个学生对象所占用的内存空间中都声明一个变量来表示学校名称,而可以在对象以外的空间声明一个表示学校名称的变量让所有对象来共享。具体内存中的分配情况如图所示。

静态变量内存分配图

从图3-18可以看出,所有学生对象共享一个名称为schoolName的变量。在一个Java类中,要实现这种功能可以使用static关键字来修饰成员变量,该变量被称作静态变量,它可以所有实例所共享。

静态变量可以使用如下语法来访问:

类名.变量名

了解了静态变量的声明和访问方式后,接下来通过一个案例来实现静态变量内存分配图中所描述的情况,如下例所示。

Example12.java

classStudent{staticString schoolName;//声明静态变量schoolName}publicclassExamplel2{publicstaticvoidmain(String[] args){Student stul =newStudent();//创建第1个学生对象Student stu2 =newStudent();//创建第2个学生对象Student.schoolName="清华大学";//为静态变量赋值//分别输出两个学生对象的信息System.out.println("我是"+stul.schoolName+"的学生");System.out.println("我是"+stu2.schoolName+"的学生");}}

Student类中定义了一个静态变量schoolName,用于表示学生所在的学校,它被所有的实例对象所共享。由于schoolName是静态变量,因此可以直接使用Student.schoolName的方式进行调用,也可以通过Student的实例对象进行调用,如 stu2.schoolName。第8行代码将变量schoolName赋值为“清华大学”后,学生对象stul和stu2的 schoolName 属性值均为“清华大学”。

需要注意的是static关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错,例如下面的代码是非法的。

publicclassStudent{publicvoidstudy(){staticint num =10;//这行代码是非法的,编译会报错}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值