Java 无法从静态上下文引用非静态方法(但已创建非静态)?

Java 无法从静态上下文引用非静态方法(但已创建非静态)?,java,oop,non-static,static,Java,Oop,Non Static,Static,我有一个简单的java问题。请记住,我是一个彻头彻尾的新手,正在学习我能找到的最低级别的编程课程。我有一个任务,我正在工作,但我有一个特定的部分,它的问题。我已经把代码剪到了核心,但我仍然无法找出我的错误所在。我将非常感谢您的帮助 首先,我创建了一个类(“Car”)。此类有一个接受参数的构造函数。(同样,这被剪掉了很多,时间更长,但错误仍然存在,仅此代码): 这部分编译没有问题。但是,当我尝试在主类中使用这个类时,就会出现问题,并遇到错误 public class Drive { publ

我有一个简单的java问题。请记住,我是一个彻头彻尾的新手,正在学习我能找到的最低级别的编程课程。我有一个任务,我正在工作,但我有一个特定的部分,它的问题。我已经把代码剪到了核心,但我仍然无法找出我的错误所在。我将非常感谢您的帮助

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

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

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上做了很多搜索,我发现几乎所有的例子都是因为程序员没有“创建”非静态部分。不过,我已经做到了。我似乎不知道我做错了什么。如果有人能帮我理解我的过错,我将不胜感激

谢谢

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

相反,调用
Car.getMake()
在概念上没有意义,因为世界上没有一辆
Car
都有一个make。只有像
userCar
这样的单个汽车才有品牌、型号等。

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

相反,调用
Car.getMake()
在概念上没有意义,因为世界上没有一辆
Car
都有一个make。只有个别车辆,如
userCar
有品牌、型号等。

执行以下操作:

userCar.getMake();
i、 e.
getMake()
不是静态方法,所以需要通过类的实例调用它

这样做:

userCar.getMake();

i、 e.
getMake()
不是静态方法,所以需要通过类的实例调用它

这不是他们是否创建了非静态部分的问题。它是在类的实例上调用方法,还是在类本身上调用方法。您在类本身
Car
上调用它,而不是
userCar
。这与他们是否创建了非静态部分无关。它是在类的实例上调用方法,还是在类本身上调用方法。你是在类本身
Car
上调用它,而不是
userCar
。噢!我懂了!这非常有效。谢谢你的充分解释,而不仅仅是告诉我要改变什么。因为它不是静态的,所以我已经“创建”了一个实例,需要将其称为单个实例,而不是错误地称为一般调用。非常感谢你!(我会接受这个当我可以)哦!我懂了!这非常有效。谢谢你的充分解释,而不仅仅是告诉我要改变什么。因为它不是静态的,所以我已经“创建”了一个实例,需要将其称为单个实例,而不是错误地称为一般调用。非常感谢你!(我会在可能的时候接受)