【问题标题】:Java static variable accessJava 静态变量访问
【发布时间】:2018-05-30 18:26:36
【问题描述】:

有人能解释一下为什么剩下的代码可以编译,但第二个不行吗?我认为在这两种情况下我都试图访问相同的“数字”变量,但我可能错了......感谢您的解释。

Screenshot

【问题讨论】:

  • 静态方法中没有this
  • 对于右边的代码,方法是静态的。这意味着,它在所有实例之间共享的静态方法。作为静态/共享,它不能访问实例变量(this.number)
  • 感谢您的快速回答。我认为静态方法中的 this 本身就是类(this.number == Number.number)
  • @RadekChromík 你搞错了。您可以使用(例如)this.number 在非静态上下文中访问静态字段,但不能在静态上下文中使用 this,甚至引用静态字段。

标签: java static static-methods


【解决方案1】:

让我们先了解什么是静态方法以及它是如何工作的,然后我们就可以轻松得出这个问题的答案了。

当一个方法被声明为静态时,我们应该记住以下几点:

静态方法属于类而不是类的对象。 无需创建类的实例即可调用静态方法。 静态方法可以访问静态数据成员并且可以改变它的值。

现在,java 中的 this 关键字是一个引用变量,它引用当前对象。 Java中的super关键字也是一个引用变量,用于引用直接父类对象。

所以,我们可以说 this 和 super 这两个关键字都是引用变量,指向某个对象。换句话说,这两个关键字都属于类的实例。

然而,静态成员属于类而不是类的实例。所以静态成员在java中不能访问this和super关键字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2015-07-22
    • 2012-06-29
    • 2011-07-04
    • 2016-09-21
    • 2013-01-31
    • 2015-06-12
    相关资源
    最近更新 更多