非静态方法不能从静态上下文中引用(虽然已经创建了非静态上下文)?

时间:2013-11-10 21:19:20

标签: java oop non-static static

我有一个快速的java问题。请记住,我是一个全新的工作,通过我能找到的最低级编程课程。我有一项我正在处理的任务,但我遇到了特定部分的问题。我已经将代码剪切到了核心,我仍然无法找出我做错了什么。我很感激任何帮助。

首先我创建了一个类(" Car")。这个类有一个带参数的构造函数。 (这又被剪掉了很多,它的时间更长了,但只有这段代码的错误仍然存​​在):

public class Car
{
   private String make;

   public Car(String carMake)
   {
      make = carMake;
   }

   public String getMake()
   {
      return make;
   }
}

这部分编译没有问题。但是,当我尝试在主类中使用这个类时,那就是出错了,我遇到了错误。

public class Drive
{
   public static void main(String[] args)
   {
      Car userCar;

      userCar = new Car("Focus");

      System.out.println(Car.getMake());
   }
}

编译此类会给出此错误消息。

Drive.java:9: error: non-static method getMake() cannot be referenced from 
a static context
  System.out.println(Car.getMake());

我已经通过互联网和SE进行了大量的搜索,而且几乎所有我发现这种情况的例子都是因为编码器没有"创建"非静态部分。不过,我做到了这一点。我似乎无法弄清楚我做错了什么。如果有人能帮我理解我的错,我会非常感激。

谢谢!

2 个答案:

答案 0 :(得分:4)

getMake()不是static,因此您需要一次为Car的单个实例访问它。因此,请将代码更改为userCar.getMake()。这意味着您希望获得userCar的make,这是一个实际的对象实例。

相反,调用Car.getMake()并不具有概念意义,因为世界上每一个Car都没有单一的品牌。只有userCar等个别汽车才有品牌,型号等

答案 1 :(得分:0)

这样做:

userCar.getMake();

即。 getMake()不是静态方法,因此您需要通过类的实例来调用它。