0

这是我定义的一个泛型类,我想知道的是,当我创建更具体的类时,例如 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);
}
}
4

3 回答 3

6

我个人对类变量的理解是,已经在类中声明的类变量的单个副本将使用关键字static来声明,并且从该类中实例化的每个对象都将包含该类的单个副本多变的。

不,不是“每个对象都包含一个副本”。静态变量与类型相关联,而不是与类型的每个实例相关联。实例根本没有变量。

确实只有一个变量(假设您只从一个类加载器加载它) ,该类型的实例有很多。没有实例?还是一个变数。一百万个实例?还是一个变数。

静态变量对常量或常量类似物最有用——比如记录器,或“有效价格集”等。在应用程序过程中不会改变的东西。根据我的经验,它们几乎总是应该final存在的,并且类型应该是不可变的类型(如String)。在可能的情况下,对静态变量也使用不可变集合——或者确保变量是私有的,并且你永远不会在类中改变集合。

您应该避免使用静态变量来存储全局变化状态。它使代码更难测试和推理。

于 2012-07-24T17:14:33.463 回答
1

1.每个object of the class人都有自己的实例变量副本,它的One per Object.

2.但是static variable会被类的所有对象共享,它的One per Class.

3.现在我将举两个例子,这两个例子很重要。

实例变量:

考虑一个游戏程序,然后每个玩家将有不同的名称、分数、武器威力、达到的阶段等......

静态变量:

考虑一个银行程序,其中每个客户都将获得一个 ID,该 ID 比前一个更大且唯一,因此静态变量将适用于此。

于 2012-07-24T17:31:16.527 回答
1

静态变量用于存储在类的所有实例之间共享的值。

如果不是这种情况,它应该是一个实例变量。

于 2012-07-25T00:23:34.607 回答