【问题标题】:non-static method cannot be referenced from a static context (already created non-static, though)?不能从静态上下文中引用非静态方法(虽然已经创建了非静态方法)?
【发布时间】:2013-11-10 21:19:19
【问题描述】:

我有一个快速的 java 问题。请记住,我是一个新手,正在学习我能找到的最低级别的编程课程。我有一个我正在处理的任务,但我遇到了它的特定部分的问题。我已经将代码剪断到核心,但我仍然无法找出我做错了什么。我将不胜感激。

首先我创建了一个类(“汽车”)。这个类有一个带参数的构造函数。 (同样,这已被剪掉很多,它更长,但仅此代码错误仍然存​​在):

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());

我已经在 Internet 和 SE 上为此进行了大量搜索,我发现几乎所有发生这种情况的实例都是因为编码器没有“创建”非静态部分。不过,我已经这样做了。我似乎无法弄清楚我做错了什么。如果有人能帮助我理解我的错,我将不胜感激。

谢谢!

【问题讨论】:

  • 这不是他们是否创建非静态部分的问题。是调用类的实例还是类本身的方法。你在类本身上调用它Car 而不是userCar

标签: java oop non-static static


【解决方案1】:

getMake() 不是static,因此您需要一次访问Car 的单个实例。所以把你的代码改成userCar.getMake()。这意味着您想要获得userCar 的品牌,这是一个实际的对象实例。

相比之下,调用Car.getMake() 在概念上没有意义,因为世界上每个Car 都没有单独的品牌。只有 userCar 这样的个别汽车才有品牌、型号等。

【讨论】:

  • 哦!我懂了!那工作得很好。感谢您充分解释它,而不仅仅是告诉我要改变什么。因为它不是静态的,所以我“创建”了一个实例,并且需要将其称为单个实例,而不是错误地作为通用调用。非常感谢! (我会尽可能接受)
【解决方案2】:

这样做:

userCar.getMake();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多