Java类中静态变量的内存空间在程序运行过程中被这个类的所有对象实例共享,有时可以看作是全局变量。因此,在某些情况下,为了节省系统内存开销和共享资源,类中的一些变量可以声明为静态变量。通过下面的例子,你可以发现合理应用静态变量的好处:
Java代码
公共课程WeekA{
静态类数据{
私人国际周;
私有字符串名称;
数据(整数,字符串)
week=I;
名称=s;
}
}
数据周[]={ 0
新数据(1,“周一”)、新数据(2,“周二”)、新数据(3,“周三”)、新数据(4,“周四”)、新数据(5,“周五”)、新数据(6,“周六”)、新数据(7,“周日”)
};
公共静态void main(String args[]){ 0
最终int N=10000
WeekA weekinstance
for(int I=1;I=N;I){ 0
week instance=new WeekA();
}
}
}
公共课程WeekA{
静态类数据{
私人国际周;
私有字符串名称;
数据(整数,字符串)
week=I;
名称=s;
}
}
数据周[]={ 0
新数据(1,“周一”)、新数据(2,“周二”)、新数据(3,“周三”)、新数据(4,“周四”)、新数据(5,“周五”)、新数据(6,“周六”)、新数据(7,“周日”)
};
公共静态void main(String args[]){ 0
最终int N=10000
WeekA weekinstance
for(int I=1;I=N;I){ 0
week instance=new WeekA();
}
}
}
在上面的代码中,Data weeks没有声明为静态变量,所以在创建WeekA对象时,会得到10,000个weeks对象的副本,这些副本存储在内存中,但是weeks对象中的数据从未被更改过,非常稳定。因此,如果所有对象都可以共享数据对象,这是一个很好的解决方案。请参见以下代码:
Java代码
公共课WeekB{
静态类数据{
私人国际周;
私有字符串名称;
数据(整数,字符串)
week=I;
名称=s;
}
}
静态数据周[]={ 0
新数据(1,“周一”)、新数据(2,“周二”)、新数据(3,“周三”)、新数据(4,“周四”)、新数据(5,“周五”)、新数据(6,“周六”)、新数据(7,“周日”)
};
公共静态void main(String args[]){ 0
最终int N=10000
WeekB weekinstance
for(int I=1;I=N;I){ 0
week instance=new week b();
}
}
}
公共课WeekB{
静态类数据{
私人国际周;
私有字符串名称;
数据(整数,字符串)
week=I;
名称=s;
}
}
静态数据周[]={ 0
新数据(1,“周一”)、新数据(2,“周二”)、新数据(3,“周三”)、新数据(4,“周四”)、新数据(5,“周五”)、新数据(6,“周六”)、新数据(7,“周日”)
};
公共静态void main(String args[]){ 0
最终int N=10000
WeekB weekinstance
for(int I=1;I=N;I){ 0
week instance=new week b();
}
}
}
请注意,在WeekB类中,static关键字添加在Data weeks[]之前,对象变量声明为static。因此,当你创建10 000个WeekB对象时,系统中只保留了该对象的一个副本,类中所有的对象实例都共享这个副本,这无疑节省了大量不必要的内存开销,实现了需要完成的系统功能。
那么我们应该尽可能多地使用静态变量吗:事实上并非如此,因为静态变量的生命周期较长,不容易被系统回收。因此,如果静态变量使用不合理,就会适得其反,造成大量的内存浪费。因此,建议在满足以下所有条件时,尽可能使用静态变量:
(1)变量中包含的对象体积大,占用内存多。
(2)变量中包含的对象生命周期较长。
(3)变量中包含的对象数据是稳定的。
(4)这个类的对象实例对这个变量中包含的对象有共享要求。
如果变量不具备上述特征,建议不要轻易使用静态变量,以免弄巧成拙。