[英]"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
类中的变量onloan
从GUI
类更改为“是”。
我查看了具有相同错误消息的其他主题,但没有点击!
需要从实例调用实例方法。 你的setLoanItem
方法是一个实例方法(它没有修饰符static
),它需要是为了起作用(因为它在它被调用的实例上设置一个值( this
))。
您需要先创建该类的实例,然后才能对其调用该方法:
Media media = new Media();
media.setLoanItem("Yes");
(顺便说一句,最好使用布尔值而不是包含“是”的字符串。)
setLoanItem 是一个实例方法,这意味着您需要一个 Media 类的实例才能调用它。 您正试图在 Media 类型本身上调用它。
您可能想查看一些基本的面向对象教程,以了解静态/实例成员是如何工作的。
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");
}
取决于您想如何传递该实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.