当前位置: 首页 > 知识库问答 >
问题:

静态方法可以访问非静态实例变量吗?

柴茂材
2023-03-14
class Laptop {
  String memory = "1GB";
}
class Workshop {
  public static void main(String args[]) {
    Laptop life = new Laptop();
    repair(life);
    System.out.println(life.memory);
    }
  public static void repair(Laptop laptop) {
    laptop.memory = "2GB";
  }
}
public static void repair(Laptop laptop) {
laptop.memory = "2GB";
}

共有1个答案

严峰
2023-03-14

静态方法可以访问它所知道的任何实例的非静态方法和字段。但是,如果它不知道要在哪个实例上操作,它就不能访问任何非静态的东西。

我想你弄错了,这样的例子不起作用:

class Test {
  int x;

  public static doSthStatically() {
    x = 0; //doesn't work!
  }
}

这里,静态方法不知道它应该访问test的哪个实例。相反,如果它是非静态方法,它将知道x引用this.x(这里的this是隐式的),但是this不存在于静态上下文中。

class Test {
  int x;
  static Test globalInstance = new Test();

  public static doSthStatically( Test paramInstance ) {
    paramInstance.x = 0; //a specific instance to Test is passed as a parameter
    globalInstance.x = 0; //globalInstance is a static reference to a specific instance of Test

    Test localInstance = new Test();
    localInstance.x = 0; //a specific local instance is used
  }
}
 类似资料:
  • 问题内容: 我想知道非静态方法如何修改静态变量。我知道静态方法只能访问其他静态方法和静态变量。但是,另一面是真的吗?非静态方法只能访问非静态变量吗?例如: 这段代码可以编译,我想知道为什么要使用静态访问特权。 问题答案: 我已经从The Java Tutorials找到了 实例方法可以直接访问实例变量和实例方法。 实例方法可以直接访问类变量和类方法。 类方法可以直接访问类变量和类方法。 类方法不能

  • 问题内容: 我已经定义了一个对象并声明了一个静态变量。在该方法中,当我尝试打印实例和类变量时,两者都打印相同的值。 不是实例变量吗?它应该打印0而不是50吗? 问题答案: 不,只有一个变量-您尚未声明任何实例变量。 不幸的是,Java允许您访问静态成员,就像通过相关类型的引用访问静态成员一样。这是IMO的设计缺陷,某些IDE(例如Eclipse)允许您将其标记为警告或错误- 但这是语言的一部分。您

  • 我在工作时遇到了这种特殊的行为,但我不确定这是什么问题。根据我,“静态”关键字有一些特性 1.属于类而不是对象。 < b>2。静态方法可以访问类的静态实例变量。 但是,有人可以解释一下特定的行为吗: 在编写这一行时,我在Eclipse中打印语句“this.x”时遇到complile时间错误,因为“不能在静态conetext”。 有人能解释一下我的理解中缺少了什么吗??

  • 本文向大家介绍我们可以从Java中的静态方法访问实例变量吗?,包括了我们可以从Java中的静态方法访问实例变量吗?的使用技巧和注意事项,需要的朋友参考一下 我们无法直接访问静态方法内的实例变量,因为静态方法只能访问静态变量或静态方法。 顾名思义,实例变量与类的实例相关。因此,直接从不依赖于任何特定实例的静态方法访问它是没有意义的。因此,要访问实例变量,我们必须具有要从中访问实例变量的类的实例。 例

  • 这将打印a.a=50 但是,如果我将更改为,那么我可以如何访问该变量呢?

  • 静态变量属于类本身,在类加载的时候就会分配内存,可以通过类名直接访问; 非静态变量属于类的对象,只有在类的对象产生时,才会分配内存,通过类的实例去访问; 静态方法也属于类本身,但是此时没有类的实例,内存中没有非静态变量,所以无法调用。