1

我正在尝试使用我制作的课程,但是当我打电话时,课程不起作用,我有点迷失了。

错误出现在程序底部的类调用和计数初始化中。

package counter;

public class Counter {
    private int value;
    public Counter(int intialValue){
        value = intialValue;
    }

    private void count() {
        value = value + 1;
    }
    private void reset(){
        value = 0;
    }
    public int getValue(){
        return value;
    }

    Counter tally = new Counter();
    tally.count();

    }
4

5 回答 5

7

所有 Java 语句都必须放入某种方法中。

目前,您的最后两行不在方法中。

Counter tally = new Counter();
tally.count();

尝试这样的事情:

public class Counter {

  ... existing members ...

  public static void main(String[] args) {
    int initialValue = Integer.parseInt(args[0]);
    Counter tally = new Counter(initialValue);
    tally.count();
  }
}
于 2013-02-01T16:57:33.830 回答
3

从您到目前为止所展示的内容来看,您的类 Counter 似乎有一个 Counter 作为实例成员,因此您有一个无限回归试图实例化它。您没有给出错误,但我希望会导致 StackOverflowError 。

假设它已编译,这不应该发生,因为 line tally.count() 不应该是合法的。进入类的唯一内容是构造函数声明、方法声明、变量声明、初始化块和嵌套的内部类声明。您班级底部的代码不算作任何这些。

此外,如果你包含一个带参数的构造函数,那么如果你想调用一个零参数的构造函数,你必须显式地创建一个。调用不存在的零参数构造函数的代码将导致另一个编译器错误。

因此,您对构造函数存在误解,并且对在类中声明事物的含义感到困惑。

于 2013-02-01T16:59:29.610 回答
1
Counter tally = new Counter();
tally.count();

在任何方法之外,这是错误。

于 2013-02-01T16:57:05.497 回答
0

tally.count();应该在方法体内。

public void someMethod() {
    tally.count();
}

此外,编译器不会在您的类中包含默认的无参数构造函数,因为您已经编写了一个 1-arg 构造函数,因此您必须将有效的 int 值传递给您的构造函数。

Counter tally = new Counter(someintval);
于 2013-02-01T16:57:01.860 回答
0

您还没有将值传递给类的实例:

Counter tally = new Counter(10);

或者可能是因为它不在

public static void main(String args) 

方法体

于 2013-02-01T16:57:18.197 回答