簡體   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