static
属性是特定于类的,对我而言,这意味着它只是该类的一个属性。我知道实例使用实例变量。我的问题是,如果我创建一个名为Animal
的类并创建一个名为live
的静态属性(这是有意义的,因为实时是Animal的静态属性),那么为什么它不会适用于dog
,human
等实例,但仅限于Animal
类?它们都是活的,在这里我可以看到实例真正共享这个静态属性live
。
请不要给我Java定义或Oracle文档定义;我知道这一切。作为初学者,我想知道为什么它在字面意义上没有意义。
答案 0 :(得分:4)
class Animal {
int age;
}
以上表明动物的每个实例包括动物的子类的实例都有一个age
,每一个都是独立的:动物可以& #39;看到或影响彼此的年龄。在内部,当您致电new Animal()
或new Dog()
时,Java会在该实例中为age
留出空间。
class Animal {
static String kingdom = "Animalia";
}
然而,这一个表明名为Animal
的类有一个属性,只有一个,它被称为Animal.kingdom
。 kingdom
属性在没有Animal实例的情况下可用,并且(在Dog扩展Animal的层次结构中)出现以Animal.kingdom
,Dog.kingdom
,{ {1}}和someAnimalInstance.kingdom
。但是,所有这些都是作为礼貌提供的:官方访问者是someDogInstance.kingdom
,并且只有一个,无论你有多少实例(包括零)你拥有Animal或其子类。
相关: Why should the static field be accessed in a static way?