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

静态和非静态字段

岳均
2023-03-14

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

共有3个答案

马胜泫
2023-03-14

实例属性是特定于实例的属性,其值不会在同一类的其他实例之间共享。

另一方面,类(或静态)属性是所有类实例的公共属性,因为它属于类,而不是特定的实例。

所以您必须小心使用静态属性,因为其中一个属性的更改将反映在使用它的所有代码上,有时会导致意外的结果。在实践中,我倾向于避免静态属性,除非它们具有常量、不可变值。

类似的考虑也适用于实例方法和静态方法:实例方法可以“看到”实例和静态方法及属性,而静态方法只能引用类的静态方法和属性,不能“看到”实例方法和属性(即,除非它实例化一个对象并使用它访问其实例成员)。

商品
2023-03-14
  • 静态字段由所有对象共享和使用并在加载类时加载
  • 非静态字段是每个对象的单独副本,并在创建对象时加载

非静态字段是由对象定义的变量?

每当创建新对象时,每个对象都将有自己的实例副本,即非静态字段

第二个对象引用与对象1相同的类,它可以对对象1的静态字段具有不同的值?

我没有真正理解你的问题,但是

  • 如果object1和object2是类的指令,那么如果object1修改类的静态字段,那么object2将获得更新的值
邢雨华
2023-03-14

与实例变量不同,在创建某个类的实例之前,可以访问该类中的静态字段或静态类变量。类中的实例变量(非静态变量)是在运行时创建该类的实例时创建的。因此,在创建该类的实例之前,无法访问非静态变量。然而,静态类成员可以在创建或实例化该类之前访问。

该类的所有实例都可以访问相同的静态变量。另一方面,实例变量是单独的/封装到类的每个实例。

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

  • 问题内容: 直到几周前,我还以为我知道何时创建字段和方法或。例如,当一个字段(例如另一个类的对象)对于该类的任意数量的对象是唯一的时,应将其设置为。 但是几周后,我读到了有关JVM垃圾收集的信息。 我知道字段永远不会被垃圾收集,并且始终保持在内存中,除非类加载器本身是垃圾收集的。 但是,如果我不创建该字段,至少它将被垃圾回收。 因此,在使字段/方法静态化与否之间似乎有一条 很细的界限 。 有人可以

  • PowerMockito.when(ConnectionFactory.getConn(“ABC”).getCurrentStatus()).thenReturn(ConnectionStatus.Connected); 对于上面的陈述,我得到了一个NPE。 我在junit测试类的开头已经有@PrepareForTest({fxallConnectionFactory.class,Connecti

  • 我有一个私有int数组,我需要以某种方式找到长度,但在静态类下无法做到这一点。我必须保持类的静态,是否可以添加其他方法来将a.length更改为其他方法? 该问题是由a.length引起的。

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

  • 问题内容: 这些对象调用之间有什么区别? 非静态: 静态的: 而且在内部为什么还要对函数使用static属性? 例: 问题答案: 静态函数,根据定义,不能也不依赖于该类的任何实例属性。也就是说,它们不需要类的实例来执行(因此,可以如您所显示的那样执行,而无需先创建实例)。从某种意义上讲,这意味着该函数不必(也永远不需要)依赖于类的成员或方法(公共或私有)。