Java,从一个类的两个对象调用的方法。同一个类中的一个对象和其他类中的一个对象

时间:2015-02-03 04:21:34

标签: java

我有这个代码,我在其中创建了一个类的对象,即MyClass。我在main方法中创建了一个对象。我想调用类的方法,但它在运行时给出StackovetrflowError。 建议我克服错误的方法。

这是代码......

class MyClass {


  public MyClass obj2  =new MyClass();


    public void show()
    {
        System.out.println("in show method...");
    }

    void message()
    {
        System.out.println("in message method...");
    }
}


public class AccessDemo {

    public static void main(String[] args) {

         MyClass obj1  = new MyClass();

            obj1.obj2.show();
    }
}

我想在方法中打印消息,即show()message()

3 个答案:

答案 0 :(得分:6)

你在这里进行了不必要的递归:

class MyClass {

    public MyClass obj2 =new MyClass();

为什么要在MyClass中创建MyClass实例 ?这将无休止地和递归地重复,直到你的内存不足为止。

解决方案:不要这样做。摆脱obj2变量,除了使程序失败之外没有任何其他目的。而只需在main方法中创建的obj1变量上调用方法。

答案 1 :(得分:2)

作为Hovercraft Full Of Eels described,问题在于:public MyClass obj2 =new MyClass();你在课堂上只能有public MyClass obj2;not initialize it范围,而不是在需要的地方初始化它,例如:

class MyClass {

public MyClass obj2;

public void show()
{
    System.out.println("in show method...");
}

void message()
{
    System.out.println("in message method...");
}
//initializze it here
public void someVoid(){
   //you may do something else
   obj2=new MyClass();
}
} 

现在你可以拥有:

public class AccessDemo {

public static void main(String[] args) {

     MyClass obj1  = new MyClass();

        obj1.someVoid();
        //now this should work properly
        obj1.obj2.show();
}
}

输出

  show方法中的

......

答案 2 :(得分:0)

obj1.obj2.show();

不正确。相反,你只需要去:

obj1.show();
obj1.mesage();