当前位置: 首页 > 面试题库 >

是否可以有多个静态变量实例

翟誉
2023-03-14
问题内容

静态变量只有实例(也就是说,它们是类的一部分)。例如:Math.pi

有什么办法可以有多个静态变量实例吗?我听说有一些与Classloader相关的东西吗?


问题答案:

如果发现需要一个静态变量的多个实例,则强烈表明您不应该首先使用静态变量。

是的,如果同一类加载到不同的类加载器中,则该类的每个副本将具有其自己的静态变量。但是,唯一可以静态引用这些静态变量的代码将是由同一类加载器加载的类。当然,该代码只能(静态地)在类的一个副本中看到静态内容。因此,您可能没有取得什么成就。

而不是搞乱类加载器,您应该重构代码以将静态变量转换为实例变量。



 类似资料:
  • 这将打印a.a=50 但是,如果我将更改为,那么我可以如何访问该变量呢?

  • 问题内容: Java静态编译器(javac)内联一些静态最终变量,并将值直接带到常量池中。考虑以下示例。A类定义了一些常量(公共静态最终变量): B类使用以下常量: 当您编译类B时,javac从类A获取这些常量的值,并在B.class中内联这些值。结果,在编译时必须将类A的依赖项B从字节码中删除。这是一个非常特殊的行为,因为在 编译时 要烘焙这些常量的值。您可能会认为这是JIT编译器在运行时可以做

  • 问题内容: 我已经读过1000多个位置,这些位置不继承静态变量。但是,这段代码如何正常工作? Parent.java Child.java 此代码显示“父母”。 还阅读了一些隐藏数据的概念。 Parent.java Child.java 现在输出为“ Child”。 那么这是否意味着 静态变量被继承,但是它们遵循数据隐藏的概念 ? 问题答案: 请查看oracle的文档:http : //docs.

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

  • 问题内容: 我想知道非静态方法如何修改静态变量。我知道静态方法只能访问其他静态方法和静态变量。但是,另一面是真的吗?非静态方法只能访问非静态变量吗?例如: 这段代码可以编译,我想知道为什么要使用静态访问特权。 问题答案: 我已经从The Java Tutorials找到了 实例方法可以直接访问实例变量和实例方法。 实例方法可以直接访问类变量和类方法。 类方法可以直接访问类变量和类方法。 类方法不能