“非静态方法不能从静态上下文引用”错误
我有一个名为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"); }
您需要正确分离实例数据的静态数据。 在你的代码中, onLoan
和setLoanItem()
是实例成员。 如果你想引用/调用它们,你必须通过一个实例来完成。 所以你要么
public void loanItem() { this.media.setLoanItem("Yes"); }
要么
public void loanItem(Media object) { object.setLoanItem("Yes"); }
取决于你想如何通过这个实例。