[英]"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.