Java &引用;无法从静态上下文引用非静态方法;错误

Java &引用;无法从静态上下文引用非静态方法;错误,java,compiler-errors,static,Java,Compiler Errors,Static,我有一个名为Media的类,它有一个名为setLoanItem的方法: public void setLoanItem(String loan) { this.onloan = loan; } 我试图通过以下方式从名为GUI的类调用此方法: public void loanItem() { Media.setLoanItem("Yes"); } 但是我得到了错误 无法从静态上下文引用非静态方法setLoanItem(java.lang.String) 我只是试图将Media类

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

public void setLoanItem(String loan) {
    this.onloan = loan;
}
我试图通过以下方式从名为
GUI
的类调用此方法:

public void loanItem() {
    Media.setLoanItem("Yes");
}
但是我得到了错误

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

我只是试图将
Media
类中的变量
onloan
GUI
类更改为“Yes”


我看了其他有相同错误信息的主题,但没有任何内容是点击

setLoanItem是一个实例方法,这意味着您需要媒体类的实例才能调用它。您正试图在媒体类型本身上调用它


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

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

您需要先创建类的实例,然后才能对其调用方法:

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

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

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

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

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

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

本质上,您没有指定要调用该方法的媒体对象,只指定了类名。可能有数千个媒体对象,而编译器无法知道您的意思,因此它会相应地生成一个错误

您可能希望传入一个要调用该方法的媒体对象:

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

您应该接受此答案。Dup-hammer持用者请注意,“非静态方法不能被引用…”和“非静态变量不能被引用…”是不同的,需要不同的答案。谢谢。当我这样做的时候,我得到了一个空指针异常……你认为问题是什么?如果您需要任何代码,请告诉我。谢谢(已经被困在这个问题上3个半小时了!)@Ruchir:看到了吗
public void loanItem(Media m) {
    m.setLoanItem("Yes");
}