【问题标题】:Yet another non static variable cannot be referenced issue另一个非静态变量不能被引用的问题
【发布时间】:2016-11-11 21:12:14
【问题描述】:

我读过thisthis,我想我得到了静态和非静态内容的理论点,但我无法将其应用于以下情况(应该可以工作) ) 可能如此、如此、如此基本,但……人类。

    public class MyClass {

    private  String varA ;
    private  int varB;


    public MyClass(String var, int var) throws SocketException {
       //stuff to work with

      }

    private void methodA() {
        //more stuff....
    }


    public static void main(String args[]) throws IOException {

        //How to instatiate MyClass(varA,varC)?
    }

}

那么,如果 MyClass 不是静态的,它应该如何从 main 实例化 MyClass?

【问题讨论】:

  • MyClass myClass = new MyClass(varA, varB);
  • 无法从静态上下文中引用非静态 varA 和 varB :S
  • varAvarBMyClass 实例的字段,那么您为什么认为在之前使用它们是有意义的你创建了一个实例?这些字段尚不存在。
  • Daaaaaaaaaaaaamn!!!!!你说得对,我确定这只是一小步...... dam,我现在明白了!

标签: java static


【解决方案1】:

如何实例化 MyClass(varA,varC) ?

public static void main(String args[]) throws IOException {

    //local variables
    String varA = "A";
    int varC = 10;

    //Use the constructor of the class to create an object
    MyClass myClassObj = new MyClass(varA, varC);
}

你总是需要使用类提供的构造函数来实例化一个类。您的类中没有默认(无参数)构造函数,因此您需要如上所示传递构造函数参数来实例化该类。

你可以看here

在您的MyClass 类实例变量varAvarB 中为每个对象(实例)分别创建/维护。

补充一点,如果类中存在任何静态变量,它们将仅在每个类中维护(而不是针对每个对象)。

【讨论】:

  • varA 和 varB 已经定义,因此:非静态 varA 和 varB 不能从静态上下文中引用:S
  • 在@Tom 的一点(但很重要)的帮助下,我明白了我的观点……这就是答案。
【解决方案2】:

希望这个回答能帮助你理解为什么main方法在非静态类中是静态的

Why is the Java main method static?

另外,在代码中:

MyClass myClass = new MyClass(varA, varC);

使用带有您自己的参数列表的公共构造函数创建您的类的新实例。

【讨论】:

    【解决方案3】:

    同意 JavaGuy。 为了您的清楚起见,将 main 方法设为静态,以便可以从 JVM 调用它而无需实例化类。因此,要访问该类的任何非静态成员,您需要拥有 JavaGuy 上述解决方案中提到的类的实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2011-11-30
      相关资源
      最近更新 更多