当前位置: 首页 > 知识库问答 >
问题:

非静态字段在只有一个实例的类中有意义吗

裴昕
2023-03-14
public class TestData {

    private ThreadLocal<Data> threadLocalData = new ThreadLocal<>();
    private UUID id = UUID.randomUUID();
    private static final TestData testData = new TestData();
    private static final Logger ogger = LoggerFactory.getLogger("data");


    private TestData() {
    }

    public static TestData getTestData() {
        return testData;
    }

    public void addTestData(String key) {
        Data data = new Data(key);

        threadLocalData.set(data);
    }

    public ThreadLocal<Data> getThreadLocalData() {
        return threadLocalData;
    }
}
TestData.getTestData().getThreadLocalData().set(new Data());
private static final TestData testData = new TestData();

那么类中有非静态成员有什么意义吗?

    private ThreadLocal<Data> threadLocalData = new ThreadLocal<>();
    private UUID id = UUID.randomUUID();

如果是,那么使用testData实例的每个线程是否都有这些非静态成员的单独副本?

共有1个答案

谷梁宁
2023-03-14

有非静态成员有意义吗

当然,因为仍然存在类的一些实例

这些非静态成员有单独的副本

 类似资料:
  • 问题内容: 编译器不允许静态方法调用非静态方法。我知道这样做是因为非静态方法通常最终会使用实例变量。 但是拥有一个不使用实例变量的非静态方法是否有意义。如果我们的行为不影响实例状态或不受实例状态的影响,则不应将这种方法标记为静态。 问题答案: 通常,没有。如果该方法不涉及任何实例状态,则没有理由将其绑定到实例。 当然,静态方法不能被继承或覆盖,因此这是您明显希望拥有一个不使用实例状态的实例方法的明

  • < code >类 这是一个函数 < code>void f(类 是否可以只传递< code>SomeObject.class而不是编译时错误?

  • 问题内容: 我希望在整个应用程序生命周期中只有一个类的5个实例。我该如何实现?如果可能,请提供示例代码。 问题答案: 由于Singleton应该由枚举组成(请参见“有效Java”): 格蕾兹·加德

  • 问题内容: 只是为了澄清我正在考虑的这个权利,在Java中,静态字段是整个类使用的变量/字段,还是可以用于引用该类的所有对象?非静态字段是由对象定义的变量吗?并且与对象1引用相同类的第二个对象可以具有与对象1的静态字段不同的值吗? 问题答案: 与实例变量不同,在创建该类的实例之前,可以访问该类中的静态字段或静态类变量。在运行时创建该类的实例时,将创建该类中的实例变量(非静态变量)。因此,直到创建该

  • 我想澄清一下,在java中,静态字段是整个类使用的变量/字段,或者可以被引用该类的所有对象使用?非静态字段是由对象定义的变量?第二个对象引用与对象1相同的类,它可以对对象1的静态字段具有不同的值?

  • 我想知道这样的声明在Java是否有某种真正的意义。我在代码中发现了它几千次,但是我学习和玩字符串,我知道无论你声明一个对象多少次:如果你之前的某个类声明了这个字符串,它就会被汇集并重用(我说的是没有显式构造函数调用而创建的字符串) 事实上,这段代码在调用比较时打印,因此两个变量引用同一个对象。说变量无法重新定义,在这种情况下单词完全没有用。我是不是没抓住重点? 还有几件事: 1 - 为什么显式调用