实例方法调用实例变量,很惊讶吗,这不是同一个实例吗
实例方法调用静态变量当然也没问题,因为静态变量是全局只有一份的
但是反过来不行,静态方法不能调用实例变量,因为静态方法里不知道你到底要调用哪个实例
看我下面的使用java操作的繁简对比就能了解一二(例子是Linux下的)
设置前
设置后
看到区别了吗,设置后就不用输入那一堆路径了。
(在这设置的环境变量是PATH=/opt/jdk1.8.0_301/bin:$PATH,具体怎么设置在下面写)
再拿java举例,安装完jdk后配置变量不止配置PATH,还要配置JAVA_HOME,好多程序会通过这个变量寻找jdk。
jdk的设置还可以用到JAVA_HOME
下面是Windows的java环境变量设置:
JAVA_HOME D:\program files\Java\jdk-14
PATH D:\program files\Java\jdk-14\bin 还可以是 %JAVA_HOME%\bin
这就看出作用来了,这的环境变量就是一个路径,通过这个路径可以找到想要的某些目录或程序。
答案:
实例方法能够直接调用实例变量,是因为实例方法的调用是通过对象引用来调用的,而对象引用的作用就是指向具体的对象实例,从而可以直接访问该对象实例的成员变量。而静态变量没有对象实例的限制,可以通过类名直接访问,因此不能在实例方法中直接调用。
解决方案一:可以通过创建实例对象来访问静态变量,再调用实例方法来间接访问静态变量。例如:
public class MyClass { private static int staticVar = 1; private int var = 2;
public int getStaticVar() {
return staticVar;
}
public void setStaticVar(int staticVar) {
MyClass.staticVar = staticVar;
}
public void funcWithStaticVar() {
System.out.println("Static variable: " + staticVar);
}
public void funcWithVar() {
System.out.println("Instance variable: " + var);
}
}
MyClass obj = new MyClass(); obj.funcWithStaticVar(); // 1 obj.funcWithVar(); // 2
解决方案二:在静态方法中访问静态变量。例如:
public static class MyClass { private static int staticVar = 1; private int var = 2;
public static void funcWithStaticVar() {
System.out.println("Static variable: " + staticVar);
}
public void funcWithVar() {
System.out.println("Instance variable: " + var);
}
}
MyClass.funcWithStaticVar(); // 1
如果需要在静态方法中访问实例变量,则需要在静态方法中传入实例对象作为参数。
如果以上两种方式都不符合要求,则无法在实例方法中直接调用静态变量。
代码参考资料: