java为什么无法从静态环境引用非静态?
要了解原因,你必须了解两者之间的区别。
实例(非静态)方法适用于特定类型(类)的对象。这些是使用新的创建的,如下所示:
SomeClass myObject = new SomeClass();
要调用实例方法,请在实例(myObject)上调用它:
myObject.getText(...)
但是,只能直接在类型上调用静态方法/字段,如下所示: 前一条语句不正确。也可以使用诸如此类的对象引用来引用静态字段, myObject.staticMethod()但是不建议这样做,因为它并不清楚它们是类变量。
... = SomeClass.final
两者不能一起工作,因为它们在不同的数据空间(实例数据和类数据)上运行
让我尝试解释一下。考虑此类(伪代码):
class Test { string somedata = "99"; string getText() { return somedata; } static string TTT = "0"; }
现在,我有以下用例:
Test item1 = new Test(); item1.somedata = "200"; Test item2 = new Test(); Test.TTT = "1";
有什么价值?
in item1 TTT = 1 and somedata = 200 in item2 TTT = 1 and somedata = 99
换句话说,TTT是该类型的所有实例共享的数据。所以说没有道理
class Test { string somedata = "99"; string getText() { return somedata; } static string TTT = getText(); // error there is is no somedata at this point }
所以问题是为什么TTT是静态的,或者为什么getText()不是静态的?
getText()
删除static,它应该会越过此错误-但在不了解你的类型的情况下,直到出现下一个错误,这只是粘贴膏药。有什么要求getText(),要求它成为非静态?
static