オブジェクトを作成するときに「非静的変数なので、静的コンテキストから参照することはできません」というメッセージが表示される 質問する

オブジェクトを作成するときに「非静的変数なので、静的コンテキストから参照することはできません」というメッセージが表示される 質問する

Java のクラスとオブジェクトの概念をテストするために、以下のコードを作成しました。

public class ShowBike {
    private class Bicycle {
        public int gear = 0;
        public Bicycle(int v) {
            gear = v;
        }
    }

    public static void main() {
        Bicycle bike = new Bicycle(5);
        System.out.println(bike.gear);
    }
}

コンパイル プロセスで以下のエラーが発生するのはなぜですか?

ShowBike.java:12: non-static variable this cannot be referenced from a static context
        Bicycle bike = new Bicycle(5);
                       ^

ベストアンサー1

静的にしますShowBike.Bicycle

public class ShowBike {

    private static class Bicycle {
        public int gear = 0;
        public Bicycle(int v) {
            gear = v;
        }

    }

    public static void main() {
        Bicycle bike = new Bicycle(5);
        System.out.println(bike.gear);
    }
}

ジャワには2種類のネストされたクラス: 「静的ネストクラス」と「インナークラス」キーワードがない場合、これは内部クラスであり、アクセスするにはstaticのインスタンスが必要になります。ShowBikeShowBike.Bicycle

ShowBike showBike = new ShowBike();
Bicycle bike = showBike.new Bicycle(5);

静的ネストされたクラスと通常の (ネストされていない) クラスは機能的にはほぼ同じで、グループ化の方法が異なるだけです。ただし、静的ネストされたクラスを使用する場合、それらの定義を別々のファイルに配置することはできないため、1 つのファイルに多数のクラス定義が含まれることになります。

おすすめ記事