我正在尝试使用我制作的课程,但是当我打电话给课程时,这种方法不起作用,我有点迷失。
错误发生在程序底部的类调用和初始化。
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();
}
答案 0 :(得分: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();
}
}
答案 1 :(得分:3)
从你到目前为止看来,看起来你的类Counter有一个Counter作为实例成员,所以你有一个无限回归试图实例化它。你没有给出错误,但我希望得到一个StackOverflowError。
假设它已编译,这不应该发生,因为行tally.count()不应该是合法的。进入类的唯一内容是构造函数声明,方法声明,变量声明,初始化程序块和嵌套的内部类声明。你班底的代码不算任何一个。
此外,如果您包含带参数的构造函数,那么如果要调用零参数构造函数,则必须显式创建一个。调用不存在的零参数构造函数的代码将导致另一个编译器错误。
因此,您对构造函数存在误解,并且对在类中声明事物意味着什么感到困惑。
答案 2 :(得分:1)
Counter tally = new Counter();
tally.count();
在任何方法之外,这是错误。
答案 3 :(得分:0)
tally.count();
应该在方法体内。
public void someMethod() {
tally.count();
}
此外,编译器不会在您的类中包含默认的no-args构造函数,因为您已经编写了1-arg构造函数,因此您必须将有效的int值传递给构造函数。
Counter tally = new Counter(someintval);
答案 4 :(得分:0)
您尚未将值传递到类的实例中:
Counter tally = new Counter(10);
或者也许是因为它不在
之内public static void main(String args)
方法主体