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

静态变量与实例变量:区别?

戎兴言
2023-03-14

静态变量和实例变量之间的区别是什么。下面这句话是我无法理解的:

在某些情况下,一个类的所有对象只能共享一个特定变量的副本——这里使用静态变量。
静态变量代表类范围的信息。一个类的所有对象共享相同的数据。

我认为实例变量在类范围内使用,而静态变量只在它们自己的方法中有作用域?

共有3个答案

养淇
2023-03-14

假设我们创建了一个静态变量K,在main函数中我们创建了三个对象:ob1 ob2 ob3;所有这些对象对于变量K可以具有相同的值。相反,如果变量K是一个实例变量,那么它可以具有不同的值:ob1.kob2.kob3.k

孙明德
2023-03-14

假设有一个测试类:

class Test{
public static int a = 5;
public int b = 10;
}
// here t1 and t2 will have a separate copy of b
// while they will have same copy of a.
Test t1 = new test(); 
Test t2 = new test();

您可以使用如下类名访问静态变量

Test.a = 1//some value But you can not access instance variable like this
System.out.println(t1.a);
System.out.println(t2.a);

在这两种情况下,测试类的所有实例共享的输出都是1。而每个实例变量都有单独的b(实例变量)副本

 t1.b = 15 // will not be reflected in t2.
 System.out.println(t1.b); // this will print 15
 System.out.println(t2.b); / this will still print 10; 

希望这能解释你的疑问。

谷梁英毅
2023-03-14

在类属性的上下文中,静态有不同的含义。如果您有一个字段,如:

private static int sharedAttribute;

然后,该类的每个实例都将共享同一个变量,因此,如果在一个实例中对其进行更改,更改将反映在更改之前或之后创建的所有实例中。

这样说,你可能会明白这在许多情况下是不好的,因为它很容易变成一个不希望的副作用:改变对象a也会影响b,你可能会想为什么b没有明显的原因就改变了。无论如何,在有些情况下,这种行为是绝对可取的:

  1. 类常量:因为它们是常量,所以让所有类访问相同的值不会有什么害处,因为没有人可以更改它。如果你有很多这个类的实例,它们也可以节省内存。不过,不确定并发访问
  2. 要共享的变量,例如引用计数器

staticvars是在程序启动之前实例化的,所以如果有太多vars,可能会降低启动速度。

static方法只能访问static属性,但在尝试之前要三思。

经验法则:不要使用静态,除非这是必要的,并且您知道自己在做什么,或者您正在声明一个类常量

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

  • 问题内容: 通常,最终静态成员,尤其是变量(或静态最终变量,当然可以以任何顺序使用,而不会重叠含义)已广泛用于Java接口中,以定义实现类的 协议行为 ,这意味着实现该类的类(继承)接口必须包含该接口的所有成员。 我无法区分 final 和 final静态 成员。final静态成员是一个声明为final或其他东西的静态成员?在哪些特定情况下应专门使用它们? 永远不能在方法内部,静态方法内部或实例方

  • 静态变量 PHP中局部变量分配在zend_execute_data结构上,每次执行zend_op_array都会生成一个新的zend_execute_data,局部变量在执行之初分配,然后在执行结束时释放,这是局部变量的生命周期,而局部变量中有一种特殊的类型:静态变量,它们不会在函数执行完后释放,当程序执行离开函数域时静态变量的值被保留下来,下次执行时仍然可以使用之前的值。 PHP中的静态变量通过

  • 问题内容: 此Java程序包含一个静态变量。但是我无法理解公共静态变量和私有静态变量之间的区别。 问题答案: 公共变量可在代码中的 任何 位置访问- 私有变量仅可在类本身内部访问。在这种情况下,您可以在类中使用它,所以很好。 请注意,静态变量是完全独立的问题-方法和类具有与变量相同的可访问性。 还有其他级别的访问权限- 和默认的“包”访问权限(无法明确指定)。有关更多详细信息,请参见Java语言规

  • 这个java程序包含一个静态变量。但是我不明白公共和私有静态变量之间的区别。

  • 本文向大家介绍浅谈静态变量、成员变量、局部变量三者的区别,包括了浅谈静态变量、成员变量、局部变量三者的区别的使用技巧和注意事项,需要的朋友参考一下 静态变量和成员变量的区别: A:所属不同  静态变量:属于类,类变量    成员变量:属于对象,对象变量,实例变量 B:内存位置不同  静态变量:方法区的静态区    成员变量:堆内存 C:生命周期不同  静态变量:静态变量是随着类的加载而加载,随着类