我有这个代码,我在其中创建了一个类的对象,即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()
。
答案 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();