java - 静态方法不能访问类的实例成员

标签 java class static-methods

在 Liang 的第 9 版 Java 编程简介 中指出,“静态方法不能访问类的实例成员”(第 312 页)。我明白了为什么一个类的实例成员需要访问一个方法(可能是静态的),但是为什么一个方法需要访问一个实例成员?对我来说,“访问”意味着“通过点运算符访问”。换句话说:

 Class myClass = new Class();
 myClass.someStaticMethod();

有道理,而:

 someNonStaticMethod.myClass

 someStaticMethod.myClass

没有。是否允许使用 someNonStaticMethod.myClass 语法?我不相信我见过这样的格式。如果不允许,为什么要提到静态方法不能访问类的实例成员呢?

请帮助解除我的困惑。

-DI

最佳答案

访问实例成员意味着访问实例的字段或属性,而不是实例本身,因为那样不会编译。点的字面意思并不像您所想的那样“访问”,我想这就是您感到困惑的根源。点用于调用特定对象的方法(参见 link )或访问对象的字段(如果字段是静态的,则为类)。

例如,假设类定义如下:

class MyClass {

   private int x;

   static void foo() {
      ... // foo cannot access member x
   }
}

因此在方法 foo 中,您不能引用 x,因为它是 MyClass 的成员字段,绑定(bind)到 MyClass 的>实例

另见 Understanding Class Members了解静态成员和实例成员之间的区别。

关于java - 静态方法不能访问类的实例成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27252915/

相关文章:

android - 我收到错误,使封闭方法 "static"或从 android 中的 SonarLint 中删除此集

java - 重新安装 Windows 后 Flutter 构建失败

java - 如何检测数据库中存储的谷歌登录帐户?

C# - 自定义三角形类,调用值

c++ - 什么是工具类? (来自 Qt 文档的术语)

objective-c - 如何异步调用 Objective-c 静态方法?

java - 需要数组,但找到对象

java - Java 中的随机种子 Math.random

C++ - 具有默认参数的模板模板参数不起作用

具有静态方法和对自身的引用的 Python 类