为什么Java设计器限制在静态上下文中使用非静态变量?

为什么Java设计器限制在静态上下文中使用非静态变量?,java,static,language-design,Java,Static,Language Design,我知道不能从静态上下文引用非静态变量。我想知道为什么Java设计师会做出这样的限制 我已经检查了堆栈溢出,有很多类似的问题和答案,但我想知道确切的原因。所以非静态变量意味着该变量需要一个对象才能有值。例如,如果你有一个Car类,你有一个非静态变量price,那么price可以简单地由Car.price引用是没有意义的。这就像我问你一辆车的价格是多少一样?。你会告诉我它是不同的。不同的汽车会有不同的价格,这是合乎逻辑的。因此,如果我生产一辆宝马汽车,那么它的价格将不同于本田汽车。为什么会有一个静态

我知道不能从静态上下文引用非静态变量。我想知道为什么Java设计师会做出这样的限制


我已经检查了堆栈溢出,有很多类似的问题和答案,但我想知道确切的原因。

所以非静态变量意味着该变量需要一个对象才能有值。例如,如果你有一个Car类,你有一个非静态变量price,那么price可以简单地由Car.price引用是没有意义的。这就像我问你一辆车的价格是多少一样?。你会告诉我它是不同的。不同的汽车会有不同的价格,这是合乎逻辑的。因此,如果我生产一辆宝马汽车,那么它的价格将不同于本田汽车。为什么会有一个静态变量?好吧,如果你有一些对所有汽车都适用的东西,比如说对它们征税。它也可能是你不需要汽车就想知道的东西,比如说汽车的描述。这并不意味着它不能更改,只是意味着该类的所有实例都是相同的

因此,非静态变量意味着该变量需要对象才能有值。例如,如果你有一个Car类,你有一个非静态变量price,那么price可以简单地由Car.price引用是没有意义的。这就像我问你一辆车的价格是多少一样?。你会告诉我它是不同的。不同的汽车会有不同的价格,这是合乎逻辑的。因此,如果我生产一辆宝马汽车,那么它的价格将不同于本田汽车。为什么会有一个静态变量?好吧,如果你有一些对所有汽车都适用的东西,比如说对它们征税。它也可能是你不需要汽车就想知道的东西,比如说汽车的描述。这并不意味着它不能更改,只是意味着该类的所有实例都是相同的

这就像在问为什么宇宙限制你在外层空间呼吸深呼吸空气。这是不可能的,因为空间的真空是由空气的缺乏来定义的,而不是因为一些设计师选择阻止你


同样,在静态上下文中也没有非静态变量。它就在那里的名字里。你不能在静态环境中引用一个非静态变量,就像你不能阅读一本没有写过的书一样。

这就像是在问为什么宇宙限制你呼吸外层空间的深呼吸空气。这是不可能的,因为空间的真空是由空气的缺乏来定义的,而不是因为一些设计师选择阻止你


同样,在静态上下文中也没有非静态变量。它就在那里的名字里。您不能在静态上下文中引用非静态变量,正如您不能阅读尚未编写的书籍一样。

因为从静态上下文访问非静态变量是没有意义的。没有可从中获取变量的对象实例。你所要求的没有任何意义。谢谢louis,现在我明白你的意思了,没有对象的实例可以从中获取变量,因为从静态上下文访问非静态变量是没有意义的。没有可从中获取变量的对象实例。你所要求的没有任何意义。谢谢路易斯,现在我明白你的意思了,没有对象的实例可以从lubed得到变量,我明白你的意思了,一个非静态变量意味着需要一个对象才能使这个变量有一个值。但是,根据你的例子,汽车税是一种共同财产,不同的汽车可能会有不同。所以,可能的观点是,有一个抽象接口设施可以实现同样的功能。你到底在问什么?为什么java设计器会限制汽车价格不能从静态上下文中引用。如果没有car对象,则可以为价格提供空值??这背后有什么具体的原因吗?我们可以从计算机的角度想象一下。我制造了一辆宝马汽车,价格为30000英镑;我制造了一辆本田汽车,价格为15000英镑。现在,当我告诉计算机我想得到汽车的价值时,价格真的是零吗?有些价格是有价值的,但我并没有明确告诉电脑我想要哪一个。此外,基元数据类型不能为null。通过使它成为一个错误,计算机告诉我,我的逻辑有些错误。如果它将值设置为0,并且没有告诉我出了什么问题,我可能会意外地免费赠送一辆宝马!我明白你的意思了,非静态变量意味着这个变量需要一个对象才能有值。但是,根据你的例子,汽车税是一种共同财产,不同的汽车可能会有不同。所以,可能的一点是,有一个抽象接口的设施来实现同样的功能。y到底是什么
你在问吗?为什么java设计器会限制汽车价格不能从静态上下文中引用。如果没有car对象,则可以为价格提供空值??这背后有什么具体的原因吗?我们可以从计算机的角度想象一下。我制造了一辆宝马汽车,价格为30000英镑;我制造了一辆本田汽车,价格为15000英镑。现在,当我告诉计算机我想得到汽车的价值时,价格真的是零吗?有些价格是有价值的,但我并没有明确告诉电脑我想要哪一个。此外,基元数据类型不能为null。通过使它成为一个错误,计算机告诉我,我的逻辑有些错误。如果它将值设置为0,并且没有告诉我出了什么问题,我可能会意外地免费赠送一辆宝马!