Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态方法和变量_Java_Static_Static Methods_Static Members - Fatal编程技术网

Java 静态方法和变量

Java 静态方法和变量,java,static,static-methods,static-members,Java,Static,Static Methods,Static Members,我知道在java中,静态方法只能使用静态变量和静态方法,而非静态方法可以使用非静态变量和方法。有没有解释为什么静态方法只能访问静态变量/方法?并且无法访问非静态方法和变量?要访问非静态方法/字段,您需要类的实例。考虑一下: a) 假设您是一个静态方法 b) 您独立于任何对象实例而存在。即使没有类实例,您仍然存在 c) 您希望访问非静态变量。存在于一个且仅存在于一个对象实例中的变量-特定于该特定对象实例的变量 d) 您将使用哪个对象实例的非静态变量 静态方法可以访问类的非静态成员。。。只要他们通过

我知道在java中,静态方法只能使用静态变量和静态方法,而非静态方法可以使用非静态变量和方法。有没有解释为什么静态方法只能访问静态变量/方法?并且无法访问非静态方法和变量?

要访问非静态方法/字段,您需要类的实例。

考虑一下:

a) 假设您是一个静态方法

b) 您独立于任何对象实例而存在。即使没有类实例,您仍然存在

c) 您希望访问非静态变量。存在于一个且仅存在于一个对象实例中的变量-特定于该特定对象实例的变量

d) 您将使用哪个对象实例的非静态变量

静态方法可以访问类的非静态成员。。。只要他们通过类引用来实现

否则-无类引用-无访问权限


有意义吗?;)

实例化类时,它将被加载到堆或堆栈中。在这种情况下,应用程序引用了内存实例所在的部分。然而,静态方法只是加载到内存中的函数。这就是为什么如果静态方法想要访问一个类变量或方法,它不能仅仅调用它,因为堆中可能有多个对该类的引用,而不是一个,并且只能存在一个静态方法


如果您想从静态方法调用任何非静态方法,您应该使用该类的实例(或创建实例),以便您可以定义您真正想要的类引用

在静态上下文中,无法访问“this”关键字。我们不能在静态上下文中使用此关键字。实例变量在构造函数调用时初始化。但是静态变量是在类加载时初始化的。在类的加载过程中,实例变量在此期间仍然未被识别如果我们在静态上下文中使用实例变量,则会导致编译时错误,因为它们当时未被识别

可能重复,但不是重复,我的问题的内容完全不同。这个问题的答案同样适用于这个问题。但是你的意思是重复,重复不同于“答案”,你可以说,“这个链接中的答案同样适用于这个问题”,而不是说它是重复的,这有点误导“可能重复(链接)“当用户识别出副本时,系统会自动添加文本。请理解,堆栈溢出的目标是提供最佳答案,无论它们是新答案还是指向以前给定答案的链接。重复标识有助于以后搜索类似问题的其他人。如果这意味着thre没有类引用,我无法访问该实例变量?我说的对吗?但是OP想知道为什么。这是一个武断的规则,还是有原因的?我们应该解释“是的,有一个非常重要的原因”。嗯……如果一个人理解了
static
的实际含义(而不仅仅是学习规则),那么原因应该是显而易见的。