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

Java中静态字段的确切含义是什么?

越景天
2023-03-14
问题内容

我想在同一类对象的各种实例之间共享一个对象。

从概念上讲,在我的程序运行时,类A的所有对象都访问类B的相同对象。

我已经看到这static是系统范围的,不鼓励使用它。这是否意味着如果我在实例化类A的对象的同一JVM上运行另一个程序,则这些对象可能会访问与先前程序中访问的对象相同的B对象?

使用静态字段的一般缺陷是什么?

是否有其他选择(不需要大量的实施工作)?


问题答案:

静态不是完全意味着“由所有实例共享”,而是“完全不与特定实例相关”。换句话说,您无需创建任何实例即可获得类A中的静态字段。

至于在同一个JVM中运行两个程序,这实际上取决于您“运行两个程序”的含义。静态字段有效地与类对象相关联,而类对象又与类加载器相关联。因此,如果这两个程序使用单独的类加载器实例,则将有两个独立的静态变量。如果他们都使用相同的类加载器,那么将只有一个,因此他们将看到彼此的更改。

至于替代方案-有多种选择。一种是将对“共享”对象的引用传递给您创建的每个需要它的对象的构造函数。然后它将需要存储该引用以供以后使用。与静态方法相比,这可能会有些痛苦并且占用更多的内存,但是确实可以简化测试。



 类似资料:
  • 问题内容: 我是JAVA的新手,因此遇到了这个词。“在方法内部创建的类,在Java中称为本地内部类。如果要调用本地内部类的方法,则必须在方法内部 实例化 该类”。粗体字。任何人都可以帮我解决这个问题。我知道这很尴尬,我应该做更多的研究,但我只是不明白。谢谢。 问题答案: 首先 声明的意思是 : 实例化的 简单含义 是从class创建一个对象 。 什么是物体? 类的实例。从一个类中,我们可以创建许多

  • (...)当您在非托管环境中使用JmsTemplate时,您可以通过使用属性SessionTransact和SessionAccountingEmode来指定这些值(事务和确认模式)。 当您将PlatformTransactionManager与JmsTemplate一起使用时,模板总是被赋予一个事务性JMS会话。(..) (顺便说一句,这是真的--会话是事务性的) 我调试了它不正确的原因,发现:

  • 这两天我一直在和Git Bash合作。我现在知道了诸如、、、和等基本操作。但我还是不知道Git Bash本身到底是什么! 我已经搜索了很多关于Git Bash的内容,但是我看到的所有站点都集中在它的命令的功能上。我仍然没有为我的问题找到一个好的答案。现在,我想,我在正确的地方得到这个答案!

  • 问题内容: 我刚开始学习Java,并编写了一个使用静态字段进行测试的类。一切正常,但是在Eclipse中,我看到一个图标,将其悬停时显示为:“应该以 静态方式访问 CarCounter类型的静态方法getCounter 。” 那么正确的方法是什么? 这是课程: 这是我尝试访问变量计数器的地方: 问题答案: 静态字段和方法不属于特定的对象,而是属于一个类,因此您应该从该类而不是对象中访问它们: 并不

  • 我在网上搜索了“Gradle classpath site:stackoverflow.com”和“Gradle classpath”,只在以下文件中找到相关信息: Gradle:What is the difference between classpath and compile dependencies? 余登宝的回答是这样写的: 编译'org.hibernate:hibernate-cor

  • 这听起来可能是一个太基本的问题,但我已经寻找了答案,现在我比以前更困惑了。 在git中将我的分支合并到另一个分支时,“我们的”和“他们的”是什么意思?这两个分支都是“我们的”。 在合并冲突中,“我们的”总是显示的两个版本的上部吗? “我们的”是否总是指合并开始时HEAD指向的分支?如果是这样的话,为什么不使用像“current branch's”这样清晰的所有格指称,而不是使用像“ours”这样在