Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;非静态变量不能从静态上下文引用此变量;创建对象时_Java_Oop_Inner Classes - Fatal编程技术网

Java &引用;非静态变量不能从静态上下文引用此变量;创建对象时

Java &引用;非静态变量不能从静态上下文引用此变量;创建对象时,java,oop,inner-classes,Java,Oop,Inner Classes,我编写了下面的代码来测试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);

我编写了下面的代码来测试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);
                       ^

制作
ShowBike.Bicycle
static

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
关键字,它是一个内部类,您需要
ShowBike
的实例才能访问
ShowBike.Bicycle

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


静态嵌套类和普通(非嵌套)类在功能上几乎相同,只是分组方式不同而已。但是,当使用静态嵌套类时,不能将它们的定义放在单独的文件中,这将导致单个文件包含大量的类定义。

Make
ShowBike.Bicycle
static

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
关键字,它是一个内部类,您需要
ShowBike
的实例才能访问
ShowBike.Bicycle

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


静态嵌套类和普通(非嵌套)类在功能上几乎相同,只是分组方式不同而已。但是,当使用静态嵌套类时,不能将它们的定义放在单独的文件中,这将导致单个文件包含大量的类定义。

main方法无法访问其类的非静态成员

顺便说一下,类应该以名词命名,而不是动词。因此,更好的方法是:

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
    }
}

main方法无法访问其类的非静态成员

顺便说一下,类应该以名词命名,而不是动词。因此,更好的方法是:

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
    }
}

Bicycle是一个内部类,因此您需要外部类实例来创建内部类实例,如:

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

或者,您可以简单地将
Bicycle
类声明为
static
,以使当前方式正常工作。

Bicycle是一个内部类,因此您需要外部类实例来创建内部类实例,如:

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

或者,您可以简单地将
Bicycle
类声明为
static
,以使当前方式正常工作。

您的Bicycle类不是静态的,因此不能在非静态方法中使用。如果要在main方法中使用它,请将其更改为

private static class Bicycle

您的自行车类不是静态的,因此不能在非静态方法中使用。如果要在main方法中使用它,请将其更改为

private static class Bicycle

您需要创建内部类的外部类对象instate。或者您需要将内部类设置为静态。因此,对于内部类,不需要对象。

您需要创建内部类的外部类对象instate。或者您需要将内部类设置为静态。因此,对于内部类,不需要对象