【问题标题】:Static methods and variables静态方法和变量
【发布时间】:2011-12-25 06:44:36
【问题描述】:

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

【问题讨论】:

  • 不是重复的,我提问的内容完全不一样。
  • 该问题的答案同样适用于该问题。
  • 但是你的意思是重复,重复不同于“答案”,你可以说,“这个链接中的答案同样适用于这个问题”,而不是说它是重复的,有点误导
  • 当用户识别出重复时,系统会自动添加“(链接)的可能重复”文本。请理解 Stack Overflow 的目标是提供最佳答案,无论它们是新答案还是指向先前给出的答案的链接。重复识别有助于以后搜索类似问题的其他人。

标签: java static static-methods static-members


【解决方案1】:

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

【讨论】:

  • 但是 OP 想知道为什么。这是一些武断的规则,还是有原因?我们有必要解释一下“是的,有一个非常重要的原因”。恕我直言...
  • 如果理解static的真正含义(而不是仅仅学习规则),那么原因应该是显而易见的。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    想一想:

    a) 假设你是一个静态方法。

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

    c) 你想访问一个非静态变量。一个只存在于一个对象实例中的变量 - 一个特定于特定对象实例的变量。

    d) 你要使用哪个对象实例的非静态变量???

    静态方法可以访问类的非静态成员...只要它们通过类引用进行。

    否则 - 没有类引用 - 没有访问权限。

    有意义吗? ;)

    【讨论】:

    • soo 这意味着没有类引用,我无法访问该实例变量?我说的对吗?
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多