关于实例变量和实例方法的问题

img


img


不知道为什么,是实例方法能直接调用实例变量,静态变量不行吗?

实例方法调用实例变量,很惊讶吗,这不是同一个实例吗
实例方法调用静态变量当然也没问题,因为静态变量是全局只有一份的
但是反过来不行,静态方法不能调用实例变量,因为静态方法里不知道你到底要调用哪个实例

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7803875
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:静态方法不能调用非静态变量,非静态方法可以引用静态变量
  • 除此之外, 这篇博客: 环境变量的作用和设置方法中的 为什么要设置环境变量? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 看我下面的使用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

    这就看出作用来了,这的环境变量就是一个路径,通过这个路径可以找到想要的某些目录或程序。

  • 您还可以看一下 任大勇老师的数据分析思维及方法课程中的 归集数据指标,数据指标拆解与确定数据维度小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    答案:

    实例方法能够直接调用实例变量,是因为实例方法的调用是通过对象引用来调用的,而对象引用的作用就是指向具体的对象实例,从而可以直接访问该对象实例的成员变量。而静态变量没有对象实例的限制,可以通过类名直接访问,因此不能在实例方法中直接调用。

    解决方案一:可以通过创建实例对象来访问静态变量,再调用实例方法来间接访问静态变量。例如:

    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

    如果需要在静态方法中访问实例变量,则需要在静态方法中传入实例对象作为参数。

    如果以上两种方式都不符合要求,则无法在实例方法中直接调用静态变量。

    代码参考资料:

    • https://www.cnblogs.com/Huiming-Lee/p/Java-Reflection-API-1.html
    • https://stackoverflow.com/questions/40761724/java-how-to-call-static-variable-of-a-class-using-reflection
    • https://blog.csdn.net/qq_34274781/article/details/77219666
    • https://my.oschina.net/luodezhi/blog/397457
    • https://stackoverflow.com/questions/18544129/can-we-access-static-variables-in-non-static-method-in-java/18544157
    • https://www.cnblogs.com/dolphin0520/p/3811437.html