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

时间:2011-02-07 14:02:59

标签: java compiler-errors static

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

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

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

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

但我收到了错误

  

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

我只是尝试将onloan类中的变量Media更改为GUI类中的“是”。

我查看了其他主题并显示了相同的错误消息,但没有点击任何内容!

4 个答案:

答案 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)

您需要正确地将静态数据与实例数据分开。在您的代码中,onLoansetLoanItem()是实例成员。如果要引用/调用它们,则必须通过实例执行此操作。所以你要么

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

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

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