我写了下面的代码来测试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
静态。
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有两种类型的嵌套类:“静态嵌套类”和“内部类”。 没有statice
关键字,它是一个内部类,您需要一个showbike
实例才能访问showbike.bycy
:
ShowBike showBike = new ShowBike();
Bicycle bike = showBike.new Bicycle(5);
静态嵌套类和普通(非嵌套)类在功能上几乎相同,只是分组方式不同而已。 但是,在使用静态嵌套类时,您不能将它们的定义放在分离的文件中,这将导致单个文件包含大量的类定义。
自行车是一个内部类,因此您需要外部类实例来创建内部类实例,如:
ShowBike sBike = new ShowBike();
Bicycle bike = sBike.new Bicycle(5);
或者您可以简单地将bycle
类声明为statice
,以使您当前的方式工作。
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
}
}