为什么 Java 设计者限制在静态上下文中使用非静态变量?
Why did the Java designer restrict the use of non-static variable in static context?
我知道不能从静态上下文中引用非静态变量。我想知道Java设计者为什么做这个限制
我查了Stack Overflow,类似的问答很多,但我想知道具体原因
因此,非静态变量意味着该变量需要一个对象才能具有值。因此,例如,如果您有一个 Car
class 并且您有非静态变量 price
,那么 Car.price
可以简单地引用价格是没有意义的。那就像我问你 "What is the price of a car?"。你会告诉我它会有所不同。不同的汽车会有不同的价格是合乎逻辑的。因此,如果我制作 Car BMW
,那么它的价格将不同于 Car Honda
。现在你为什么要有一个静态变量?好吧,如果你有一些适用于所有汽车的东西,比如对它们征税。它也可能是您在没有汽车的情况下想知道的东西,例如汽车是什么的描述。这并不意味着它不能更改它只是意味着对于 class 的所有实例都是相同的。
这就像在问为什么宇宙会限制你在外层space深吸一口气。这是不可能的,因为 space 的真空是 定义的 没有空气,而不是因为某些设计师选择阻止你。
同样,在 static 上下文中没有 non-static 变量。 (它就在名称中。)您不能在静态上下文中引用非静态变量,就像您不能阅读一本尚未写成的书一样。
我知道不能从静态上下文中引用非静态变量。我想知道Java设计者为什么做这个限制
我查了Stack Overflow,类似的问答很多,但我想知道具体原因
因此,非静态变量意味着该变量需要一个对象才能具有值。因此,例如,如果您有一个 Car
class 并且您有非静态变量 price
,那么 Car.price
可以简单地引用价格是没有意义的。那就像我问你 "What is the price of a car?"。你会告诉我它会有所不同。不同的汽车会有不同的价格是合乎逻辑的。因此,如果我制作 Car BMW
,那么它的价格将不同于 Car Honda
。现在你为什么要有一个静态变量?好吧,如果你有一些适用于所有汽车的东西,比如对它们征税。它也可能是您在没有汽车的情况下想知道的东西,例如汽车是什么的描述。这并不意味着它不能更改它只是意味着对于 class 的所有实例都是相同的。
这就像在问为什么宇宙会限制你在外层space深吸一口气。这是不可能的,因为 space 的真空是 定义的 没有空气,而不是因为某些设计师选择阻止你。
同样,在 static 上下文中没有 non-static 变量。 (它就在名称中。)您不能在静态上下文中引用非静态变量,就像您不能阅读一本尚未写成的书一样。