另一个非静态变量不能引用问题

时间:2016-11-11 21:12:14

标签: java static

我已经阅读了this,还有this,我想我已经获得静态和非静态内容的理论观点,但我无法应用它以下情况(应该是可行的)可能是这样,所以,基本但......人类。

    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呢?

3 个答案:

答案 0 :(得分:2)

如何实现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类实例变量varA中,分别为每个对象(实例)创建/维护varB

只是要添加,如果类中存在任何静态变量,它们将仅按类(而不是每个对象)进行维护。

答案 1 :(得分:1)

我希望这个答案有助于您理解为什么main方法在非静态类中是静态的

Why is the Java main method static?

另外,在代码中:

MyClass myClass = new MyClass(varA, varC);

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

答案 2 :(得分:1)

同意JavaGuy。 为了您的清晰起见,main方法是静态的,因此可以从JVM调用它而无需实例化类。因此,要访问类的任何非静态成员,您需要具有JavaGuy上述解决方案所提及的类的实例。