我有一个名为Media
的类,它有一个名为setLoanItem
的方法:
public void setLoanItem(String loan) {
this.onloan = loan;
}
我试图通过以下方式从名为GUI
的类中调用此方法:
public void loanItem() {
Media.setLoanItem("Yes");
}
但我收到了错误
非静态方法setLoanItem(java.lang.String)无法从静态上下文引用
我只是尝试将onloan
类中的变量Media
更改为GUI
类中的“是”。
我查看了其他主题并显示了相同的错误消息,但没有点击任何内容!
答案 0 :(得分:72)
需要从实例调用实例方法。你的setLoanItem
方法是一个实例方法(它没有修饰符static
),它需要它才能运行(因为它在被调用的实例上设置一个值( this
))。
您需要先创建该类的实例,然后才能调用该方法:
Media media = new Media();
media.setLoanItem("Yes");
(顺便说一下,最好使用布尔值而不是包含“是”的字符串。)
答案 1 :(得分:11)
setLoanItem是一个实例方法,这意味着您需要一个Media类的实例才能调用它。您试图在媒体类型本身上调用它。
您可能希望查看一些基本的面向对象的教程,以了解静态/实例成员的工作方式。
答案 2 :(得分:2)
setLoanItem()
不是静态方法,它是一个实例方法,这意味着它属于该类的特定实例而不是该类本身。
基本上,您尚未指定要调用方法的媒体对象,您只需指定类名。可能有数以千计的媒体对象,编译器无法知道你的意思,所以它会相应地产生错误。
您可能希望传入一个要调用该方法的媒体对象:
public void loanItem(Media m) {
m.setLoanItem("Yes");
}
答案 3 :(得分:0)
您需要正确地将静态数据与实例数据分开。在您的代码中,onLoan
和setLoanItem()
是实例成员。如果要引用/调用它们,则必须通过实例执行此操作。所以你要么
public void loanItem() {
this.media.setLoanItem("Yes");
}
或
public void loanItem(Media object) {
object.setLoanItem("Yes");
}
取决于您希望如何传递该实例。