这是我定义的泛型类,我想知道的是当我使用类变量创建更具体的类(例如CAR类)时?我个人对类变量的理解是,在类中声明的类变量的单个副本将使用关键字static声明,并且已从类中实例化的每个对象将包含该类的单个副本变量
实例变量允许从类创建的类/对象的每个实例每个对象都有一个实例变量的单独副本吗?
因此,实例变量对于定义类/数据类型的属性非常有用,例如House会有一个位置,但现在何时我会在House对象中使用类变量?或者换句话说,在设计类时正确使用类对象是什么?
public class InstanceVaribale {
public int id; //Instance Variable: each object of this class will have a seperate copy of this variable that will exist during the life cycle of the object.
static int count = 0; //Class Variable: each object of this class will contain a single copy of this variable which has the same value unless mutated during the lifecycle of the objects.
InstanceVaribale() {
count++;
}
public static void main(String[] args) {
InstanceVaribale A = new InstanceVaribale();
System.out.println(A.count);
InstanceVaribale B = new InstanceVaribale();
System.out.println(B.count);
System.out.println(A.id);
System.out.println(A.count);
System.out.println(B.id);
System.out.println(B.count);
InstanceVaribale C = new InstanceVaribale();
System.out.println(C.count);
}
}
答案 0 :(得分:6)
我个人对类变量的理解是,在类中声明的类变量的单个副本将使用关键字static声明,并且已从类中实例化的每个对象将包含一个副本类变量。
没有。并不是“每个对象都包含一个副本”。静态变量与类型相关联,而不是与该类型的每个实例相关联。 实例根本没有变量。
只有一个变量(假设你只是从一个类加载器加载它)然而有许多类型的实例。没有实例?还有一个变量。一百万个实例?还有一个变量。
静态变量主要用于常量或常数相似 - 例如记录器或“有效价格集”等。在应用程序过程中不会发生变化的事情。根据我的经验,它们几乎总是final
,类型应该是不可变类型(如String
)。在可能的情况下,对于静态变量也使用不可变集合 - 或者确保变量是私有的,并且永远不要在类中变异集合。
你应该避免使用静态变量来存储全局变化状态。它使代码更难以测试和推理。
答案 1 :(得分:1)
1。每个object of the class
都有自己的实例变量副本,其One per Object.
2。但static variable
将由<* strong>的所有对象共享,One per Class.
3。现在我将举两个例子来说明这两个重要性。
实例变量:
考虑一个游戏计划,然后每个玩家将拥有不同的名称,分数,武器力量,达到阶段等......
静态变量:
考虑一个银行业务计划,每个客户将获得一个Id,它比前一个更大且独特,因此静态变量将适用于此。
答案 2 :(得分:1)
静态变量用于存储在类的所有实例之间共享的值。
如果不是这种情况,它应该是一个实例变量。