“非静态变量这不能从静态上下文引用的”创建对象时(“Non-static variable this

2019-07-21 07:29发布

我写了下面的代码来测试类和对象的概念,在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);
                       ^

Answer 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);
    }
}

在Java中有两种类型的嵌套类的 :“Static Nested Class和”和“内部类” 。 如果没有static关键字是一个内部类,您将需要一个实例的ShowBike访问ShowBike.Bicycle

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

静态嵌套类和正常(非嵌套)班几乎是在功能上是相同的,它只是不同的方式来组织的事情。 然而,使用静态嵌套类的时候,你不能把他们的定义中分离出来的文件,这将导致含有大量的类定义的单个文件。



Answer 2:

自行车是一个内部类,所以你需要外部类的实例来创建内部类的实例,如:

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

或者你可以简单地声明Bicycle类为static ,使您目前的工作方式。



Answer 3:

的主要方法不能访问它的类的非静态成员。

顺便说一句,类应名词,动词不被命名后。 因此,一个更好的方式来做到这一点是:

private class Bicycle {
    public int gear = 0;

    public Bicycle(int v) {
        gear = v;
    }

    public void showGear() {
        System.out.println(gear);
    }

    public static void main(String[] args) {
        Bicycle bike = new Bicycle(6);
        bike.showGear(); // Notice that the method is named after a verb
    }
}


Answer 4:

您需要创建内部类的外部类对象instate。 或者你需要内部类静态。 所以对于内部类不需要的对象。



Answer 5:

您的自行车类不是静态的,并且因此不能在非静态方法中。 如果你想在主方法来使用它,将其更改为

private static class Bicycle


文章来源: “Non-static variable this cannot be referenced from a static context” when creating an object