我知道无法从静态上下文引用非静态变量。我想知道为什么Java设计师会制定这个限制。
我查看了Stack Overflow,有很多类似的问题和答案,但我想知道确切的原因。
答案 0 :(得分:6)
因此,非静态变量意味着该变量需要一个对象才能拥有一个值。因此,例如,如果您有一个Car
类并且您拥有非静态变量price
,则Car.price
只能简单地引用价格是没有意义的。那就好像我问你“车的价格是多少?”。你会告诉我它有所不同。不同的汽车价格不同是合乎逻辑的。因此,如果我制作Car BMW
,则其价格将与Car Honda
不同。现在为什么你会有一个静态变量?好吧,如果你有一些事情适用于所有汽车,比如对它们征税。它也可能是你想要在没有汽车的情况下想知道的东西,比如说汽车的描述。这并不意味着它不能被改变它只是意味着对于该类的所有实例都是相同的。
答案 1 :(得分:1)
这就像是在问为什么宇宙会限制你呼吸外太空深处的空气。这是不可能的,因为没有空气,空间的真空是定义,而不是因为一些设计师选择阻止你。
同样,在 static 上下文中没有非静态变量。 (它就在名称中。)你不能在静态环境中引用一个非静态变量,而不是读一本没有写过的书。