[英]Storing a value for all the instances of a given class
我有一个名为Foo的类,该类在某些方法中依赖于依赖于时间的globalTime值。 为简化起见,假设它是一个长整数,用于存储自程序启动以来的秒数。 现在,我希望Foo的所有实例都为globalTime共享完全相同的值。 我当然可以创建另一个存储该值的类,并使Foo的所有实例检索该类的值,但我只是想知道:是否可以从该类内部做到这一点?
我正在寻找类似静态字段的内容,但是能够更改其值,尽管它只存储一次,而不是为每个实例存储一次,因此该类的每个实例都将为该字段共享相同的值。
我只是对Java中是否存在类似的东西感到好奇,我并不是说这是比其他选择更好或更坏的做法,所以请不要讨论想要这样做的“目的”。
正如您已经被告知要创建一个静态字段。 答案是正确的。
请注意以下事项以清除它:
static
字段与类相关联。 创建或销毁对象对静态字段没有任何影响。 static
字段保留在类的范围内,而不是对象。 ClassName.fieldName
访问。 这就是为什么创建对象对其没有任何影响的原因。
您应该为此使用静态字段。 静态字段的值可以像通常字段的值一样很好地更改。
如果在多线程中使用globalTime
,请考虑使用静态AtomicLong ,它将处理同步。
如果您的值取决于globalTime,则将static volatile
字段用作:
public class Foo {
static volatile long globalTime=System.nanoTime();
}
class B{
public static void main(String args[]){
System.out.println(Foo.globalTime);
}
}
由于易失性字段避免了编译器缓存依赖于时间字段的值。 这样的答案将进一步为您提供帮助。
可以将它作为包裹在一直调用System.nanoTime()
的线程周围的静态字段。 我认为没有问题。 像这样
private static long timer = 0;
static {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
timer = System.nanoTime() - timer;
}
}
}).start();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.