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

静态与非静态

麹培
2023-03-14
问题内容

直到几周前,我还以为我知道何时创建字段和方法staticnon- static。例如,当一个字段(例如另一个类的对象)对于该类的任意数量的对象是唯一的时,应将其设置为static

但是几周后,我读到了有关JVM垃圾收集的信息。

我知道static字段永远不会被垃圾收集,并且始终保持在内存中,除非类加载器本身是垃圾收集的。

但是,如果我不创建该字段static,至少它将被垃圾回收。

因此,在使字段/方法静态化与否之间似乎有一条 很细的界限

有人可以在决定中向我解释这条 细线 ,以便我的应用程序更高效。


问题答案:

它可能很薄,但有非常明显的区别。当一个字段与某个类的任何实例都不相关时,可以将其声明为静态字段。

一个简单的静态字段用例是使用final关键字声明常量,例如:

public static final int MAX_ALLOWED = 10;

方法也是如此。当方法不依赖于类的实例或类的状态时,可以将其声明为静态方法。这就是静态方法不能使用类的实例成员的原因。



 类似资料:
  • 问题内容: Java中的静态和非静态枚举有什么区别?两种用法是相同的。 正确吗 所有静态的都在启动时加载到内存中,非静态的则按需加载 ? 如果是,那么哪种方法更好?将某些数据始终保留在内存中还是每次使用服务器资源加载它们? 问题答案: 所有的都是有效的。如果您有嵌套的枚举,则它与相同。 所有类都是延迟加载的(枚举或其他),但是在加载时,它们会一次全部加载。也就是说,您不能加载一些常量,而不能加载其

  • 问题内容: 我已经定义了一个对象并声明了一个静态变量。在该方法中,当我尝试打印实例和类变量时,两者都打印相同的值。 不是实例变量吗?它应该打印0而不是50吗? 问题答案: 不,只有一个变量-您尚未声明任何实例变量。 不幸的是,Java允许您访问静态成员,就像通过相关类型的引用访问静态成员一样。这是IMO的设计缺陷,某些IDE(例如Eclipse)允许您将其标记为警告或错误- 但这是语言的一部分。您

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

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

  • 我的程序有问题。Eclipse写道: 我做错了什么?我的应用程序中有2个错误。班你能改进我的代码并解释一下吗?先谢谢你。 多边形 地聚线

  • 我在看一个项目,我发现了一些很奇怪的东西。 现在,我认为唯一的两个优点是,在非静态容器中封装时,命名更加清晰,并且可以传递的参数更少。 但我想知道这是不是一个好主意,通过设计来包装静态类与非静态?如果有的话,还有哪些其他原因?因为我认为创建一个静态并对其进行调用是可以的。但是这个项目特意将所有静态类打包;我也不知道为什么。