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


71

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

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

我试图从以GUI以下方式命名的类中调用此方法:

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

但是我得到了错误

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

我只是试图onloanMedia类中的变量从类更改为“是” GUI

我看过其他主题,但有相同的错误消息,但没有点击!


4
您应该接受答案。
NateW

1
请注意, Dup-hammer wielders ”“无法引用非静态方法...”无法引用非静态变量...”是不同的,需要不同的答案。谢谢。
斯蒂芬·C

Answers:


73

需要从实例中调用实例方法。您的setLoanItem方法是一个实例方法(它没有修饰符static),它必须是函数才能起作用(因为它是在(this)上调用的实例上设置一个值)。

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

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

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


我这样做时会得到一个空指针异常...您认为问题是什么?让我知道您是否需要任何代码。谢谢!(现在已经在此上停留了三个半小时!)
Ruchir Baronia 2015年


11

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

您可能需要研究一些基本的面向对象的教程,以了解静态/实例成员的工作方式。


2

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

本质上,您没有指定什么你只指定的类名,你要调用的方法媒体对象。可能有成千上万个媒体对象,并且编译器无法知道您的意思,因此相应地会产生错误。

您可能希望传递一个媒体对象以在其上调用方法:

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

0

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

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

要么

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.