SER*_*ich 8 java variables static
所以我的理解是你不能使用静态方法来访问非静态变量,但我遇到了以下代码.
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";
}
}
Run Code Online (Sandbox Code Playgroud)
哪个编译没有错误.
所以不是
public static void repair(Laptop laptop) {
laptop.memory = "2GB";
}
Run Code Online (Sandbox Code Playgroud)
访问类Laptop中定义的String内存,这是非静态实例变量?
由于代码编译没有任何错误,我假设我不理解这里的东西.有人可以告诉我我不理解的事吗?
Tho*_*mas 24
静态方法可以访问它知道的任何实例的非静态方法和字段.但是,如果它不知道要操作哪个实例,则它无法访问任何非静态的内容.
我认为你错误的是这样的例子不起作用:
class Test {
int x;
public static doSthStatically() {
x = 0; //doesn't work!
}
}
Run Code Online (Sandbox Code Playgroud)
这里静态方法不知道Test它应该访问哪个实例.相反,如果它是一个非静态方法,它将知道x引用this.x(this这里是隐含的)但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
}
}
Run Code Online (Sandbox Code Playgroud)