“无法从静态上下文引用非静态方法”错误

我有一个名为 Media的类,它有一个名为 setLoanItem的方法:

public void setLoanItem(String loan) {
this.onloan = loan;
}

我尝试用以下方法从一个名为 GUI的类调用这个方法:

public void loanItem() {
Media.setLoanItem("Yes");
}

但是我得到了错误

不能从静态上下文引用非静态方法 setLoanItem (java.lang.String)

我只是试图将 Media类中的变量 onloanGUI类改为“ Yes”。

我已经查看了具有相同错误消息的其他主题,但是没有点击任何内容!

370304 次浏览

SetLoanItem 是一个实例方法,这意味着您需要 Media 类的一个实例来调用它。您试图调用 Media 类型本身。

您可能需要查看一些基本的面向对象教程,以了解静态/实例成员是如何工作的。

需要从实例调用实例方法。您的 setLoanItem方法是一个实例方法(它没有修饰符 static) ,它需要这样才能正常运行(因为它在调用它的实例上设置了一个值(this))。

在调用该类的方法之前,需要创建该类的实例:

Media media = new Media();
media.setLoanItem("Yes");

(顺便说一下,最好使用布尔值,而不是包含“ Yes”的字符串。)

您需要正确地将静态数据与实例数据分开。在您的代码中,onLoansetLoanItem()是实例成员。如果你想引用/调用它们,你必须通过一个实例。所以你要么想

public void loanItem() {
this.media.setLoanItem("Yes");
}

或者

public void loanItem(Media object) {
object.setLoanItem("Yes");
}

这取决于您希望如何传递该实例。

setLoanItem()不是一个静态方法,它是一个实例方法,这意味着它属于该类的一个特定实例,而不是该类本身。

实际上,您没有指定要在其上调用方法的 什么媒体对象,只是指定了类名。可能有成千上万个媒体对象,编译器无法知道其中一个对象的含义,因此它会相应地生成一个错误。

您可能需要传入一个媒体对象,在该对象上调用方法:

public void loanItem(Media m) {
m.setLoanItem("Yes");
}