[英]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.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
}
}
您只能使用object reference
访问。
如果在静态上下文中使用,则在类级别定义的实例变量必须使用对象名称进行限定。 但这并不意味着您根本无法访问。
静态方法不能修改它们的值。 您可以通过使用当前类的引用访问它们来获取它们的当前值。
是的,非静态方法可以访问静态变量或调用 Java 中的静态方法。 没有问题,因为静态成员
即静态变量和静态方法都属于一个类,可以从任何地方调用,具体取决于它们的访问修饰符。
例如,如果静态变量是私有的,那么它只能从类本身访问,但您可以从任何地方访问公共静态变量。
类似地,可以从同一类的非静态方法调用私有静态方法,但可以从任何地方调用公共静态方法,例如main()
试试这个代码
public static void repair() {
Laptop laptop =new Laptop();
laptop.memory="2GB";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.