我知道在java中静态方法只能使用静态变量和静态方法,但非静态方法可以使用非静态变量和方法。有没有解释为什么静态方法只能访问静态变量/方法?并且无法访问非静态方法和变量?
答案 0 :(得分:8)
要访问非静态方法/字段,您需要该类的实例。
答案 1 :(得分:3)
实例化一个类时,它将被加载到堆或堆栈中。在这种情况下,您的应用程序具有对内存实例所在部分的引用。但是,静态方法只是加载到内存中的函数。这就是为什么如果您的静态方法想要访问类变量或方法,它不能只调用它,因为堆中可能存在多个对该类的引用,而且只存在一个静态方法。
如果要从静态方法调用任何非静态方法,则应该将该实例(或创建一个)用于该类,以便您可以定义您真正想要的类引用。
答案 2 :(得分:2)
想一想:
a)假设您是一个静态方法。
b)您独立于任何对象实例存在。即使没有类实例,也存在。
c)您想要访问非静态变量。存在于ONE和ONLY对象实例中的变量 - 一个特定于该特定对象实例的变量。
d)您将使用哪个对象实例的非静态变量???
静态方法可以访问类的非静态成员......只要他们通过类引用来访问它们。
否则 - 没有类引用 - 无权访问。
有意义吗? ;)
答案 3 :(得分:0)
在静态上下文中,'this'关键字无法访问。我们不能在静态上下文中使用此关键字。实例变量在构造函数调用时初始化。但是在加载类时会初始化静态变量。在加载类时,如果我们在静态上下文中使用实例变量导致编译时错误,那么在此期间仍未识别实例变量,因为当时未识别它们