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

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

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

我试图从一个名为GUI的类以如下方式调用此方法:

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

但是我得到错误

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

我只是简单地试图将Media类中的variables从GUI类更改为“Yes”。

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

实例方法需要从实例中调用。 你的setLoanItem方法是一个实例方法(它没有static修饰符),它需要为了运行(因为它正在调用( this )的实例上设置一个值)。 您需要先创build该类的实例,然后才能调用该方法:

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

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

setLoanItem是一个实例方法,这意味着你需要一个Media类的实例来调用它。 您正尝试在Mediatypes本身上调用它。

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

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

从本质上讲,你没有指定要调用该方法的媒体对象,只指定了类名。 可能有成千上万的媒体对象,编译器无法知道你的意思,所以它会相应地产生一个错误。

你可能想传入一个媒体对象来调用该方法:

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

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

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

要么

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

取决于你想如何通过这个实例。