0
package xyz;

import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class XYZ {

    public static void main(String[] args) throws InterruptedException {

        class TimeClass implements ActionListener {

            private int counter = 0;

            @Override
            public void actionPerformed(ActionEvent e) {
                counter++;
                System.out.println(counter);
            }

        }

        Timer timer;
        TimeClass tc = new TimeClass();
        timer = new Timer (100, tc);
        timer.start();
        Thread.sleep(20000);

    }
}

上記のコードでは:

  1. TimeClass は、main() 関数内で作成する必要があります。それ以外の場合、「非静的変数は静的コンテキストから参照できません。」というエラーが表示されます。どうしてこれなの?

  2. public や private などの TimeClass のアクセス指定子を使用すると、不正な式の開始エラーが発生します。どうしてこれなの?

4

1 に答える 1

5
  1. メイン メソッドの外で TimeClass を定義する場合は、静的にする必要があります。静的メソッド(メイン)からアクセスしようとしているためです。静的ブロックまたはメソッドから非静的変数にアクセスすることはできません。

  2. メソッド内でクラスを定義している場合(ケースのように)、そのクラスにアクセス指定子を定義することはできません。メソッド内でのみアクセスでき、このメソッドの外では誰もそれを見たり使用したりできないためです。

コードを次のように変更すると、機能します。

public class Test {

    private static class TimeClass implements ActionListener {

        private int counter = 0;

        @Override
        public void actionPerformed(ActionEvent e) {
            counter++;
            System.out.println(counter);
        }

    }

    public static void main(String[] args) throws InterruptedException {    

        TimeClass tc = new TimeClass();
        Timer timer = new Timer (100, tc);
        timer.start();
        Thread.sleep(20000);    
    }
}
于 2012-11-26T07:59:33.337 に答える