需要帮助找出我在TestClock.java程序中获取java.lang.StackOverflowError的原因

时间:2015-07-12 03:10:02

标签: java eclipse

您好,感谢您提供的任何帮助,

我仍然是Java的新手,我需要一些帮助来弄清楚为什么我的程序不起作用。编译时,一切看起来都很好,我使用了两个命令行参数(11:45:12 11:48:13)。当我运行该程序时,它会重新启动此错误:

Exception in thread "main" java.lang.StackOverflowError at Clock.toString(Clock.java:37)

我忘了做什么?知道我需要修理什么吗?

以下是代码:

我的时钟课程:

//header files

import java.time.LocalTime;
import static java.lang.System.out;

// creating class clock
public class Clock {

// private data fields
private LocalTime startTime;
private LocalTime stopTime;

// no argument cosntructor to initilize startTime to current time
protected Clock() {
    startTime = LocalTime.now();
}

//method start() resets the startTime to the given time
protected LocalTime start() {
    startTime = LocalTime.now();
    return startTime;
}

//method stop() sets the endTime to given time
protected LocalTime stop() {
    stopTime = LocalTime.now();
    return stopTime;
}

//getElapsedTime() method returns elapsed time in sconds
private void geElapsedTime() {
    long elapsedTime = stopTime.getSecond() - startTime.getSecond();
    out.println("Elapsed time is seconds: " + elapsedTime);
}

public String toString() {
    return toString();
}
}

对于我的TestClock类:

// header files
import java.time.LocalTime;
import static java.lang.System.err;
import static java.lang.System.out;

// creating class of TestClock
class TestClock {

// construct a clock instance and return elapsed time
public static void main(String[] args) {

// creating object
    Clock newClock = new Clock();

// checking the condition using loop
    if (args.length == 2) {
        LocalTime startTime = LocalTime.parse(args[0]);
        LocalTime endTime = LocalTime.parse(args[1]);
    }
    else {
        err.println("Application requires 2 command line arguments");
                  System.exit(1);
    }

// display new clock value
    out.println(newClock);

}


}

3 个答案:

答案 0 :(得分:2)

Clock类中的toString()方法是以递归方式调用自身。我想你可能想要super.toString(),但在这种情况下,首先覆盖方法是不必要的。如果您想打印时间,可以使用startTime.toString()stopTime.toString()

答案 1 :(得分:0)

你基本上将toString()返回给自己,这看起来像是一个递归调用。这会使堆栈过度流动并导致错误。 toString()是Object类中的一个方法,所有对象都是从该类继承的。您需要使用自己的String解释来覆盖它。你应该做点什么

@Override
public String toString()
{
return "The starttime is: " + startTime " and endtime is: " + endTime";
}

答案 2 :(得分:0)

你的toString方法无限地调用自己。你应该删除它,特别是因为它没有输出任何特殊的东西。