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ステートメントは、ある種のメソッドに入れる必要があります。

現在、最後の2行はメソッドに含まれていません。

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が発生することを期待しています。

これは、コンパイルされていることを前提としています。これは、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引数のコンストラクタを記述しているため、有効な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 に答える