繁体   English   中英

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

[英]Can static method access non-static instance variable?

所以我的理解是你不能使用静态方法来访问非静态变量,但我遇到了以下代码。

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";
}

访问类笔记本电脑中定义的字符串内存,这是非静态实例变量?

由于代码编译没有任何错误,我假设我不理解这里的某些东西。 有人可以告诉我我不明白的地方吗?

静态方法可以访问它知道的任何实例的非静态方法和字段。 但是,如果它不知道要操作哪个实例,则它无法访问任何非静态内容。

我认为您误会了像这样不起作用的例子:

class Test {
  int x;

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

这里的静态方法不知道它应该访问哪个Test实例。 相反,如果它是一个非静态方法,它会知道x指的是this.xthis是隐含的),但this在静态上下文中不存在。

但是,如果您提供对实例的访问,即使是静态方法也可以访问x

示例:

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
  }
}

您只能使用object reference访问。

如果在静态上下文中使用,则在类级别定义的实例变量必须使用对象名称进行限定。 但这并不意味着您根本无法访问。

静态方法不能修改它们的值。 您可以通过使用当前类的引用访问它们来获取它们的当前值。

是的,非静态方法可以访问静态变量或调用 Java 中的静态方法。 没有问题,因为静态成员

即静态变量和静态方法都属于一个类,可以从任何地方调用,具体取决于它们的访问修饰符。

例如,如果静态变量是私有的,那么它只能从类本身访问,但您可以从任何地方访问公共静态变量。

类似地,可以从同一类的非静态方法调用私有静态方法,但可以从任何地方调用公共静态方法,例如main()

试试这个代码

public static void repair() {

    Laptop laptop =new Laptop();

    laptop.memory="2GB";

  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM