繁体   English   中英

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

[英]"Non-static method cannot be referenced from a static context" error

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

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

我试图通过以下方式从名为GUI的类调用此方法:

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

但我收到错误

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

我只是想将Media类中的变量onloanGUI类更改为“是”。

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

需要从实例调用实例方法。 你的setLoanItem方法是一个实例方法(它没有修饰符static ),它需要是为了起作用(因为它在它被调用的实例上设置一个值( this ))。

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

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

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

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

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

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");
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM