首頁 > Java > java教程 > 為什麼在 Java 中出現「無法對非靜態欄位進行靜態引用」和「無法對非靜態方法進行靜態引用」錯誤?

為什麼在 Java 中出現「無法對非靜態欄位進行靜態引用」和「無法對非靜態方法進行靜態引用」錯誤?

Linda Hamilton
發布: 2024-11-03 00:32:02
原創
372 人瀏覽過

Why Do I Get

JAVA:理解「無法對非靜態欄位進行靜態引用」與「無法對非靜態方法進行靜態引用」錯誤

Java程式設計通常涉及操作靜態或非靜態的欄位和方法。了解兩者之間的差異對於防止常見錯誤至關重要。

靜態與非靜態

靜態欄位和方法與類別本身關聯,而不是與類別本身關聯。與該類別的任何特定物件相比。可以使用類別名稱直接存取它們,而不需要建立物件。相反,非靜態欄位和方法是特定於實例的,需要使用類別的物件。

「無法對非靜態欄位/方法進行靜態引用」錯誤

當您嘗試從靜態上下文中(例如從靜態方法或從類別聲明本身)存取非靜態欄位或方法時,會出現此錯誤。若要解決此錯誤,您可以將欄位或方法宣告為靜態,也可以建立類別的實例並透過物件實例存取非靜態成員。

在您提供的範例程式碼中:

<code class="java">public class Cerchio {
    float r; // non-static field
    float area; // non-static field
    float cfr; // non-static field
    
    public static void main(String[] args) {
        r = 5; // Error: Cannot access non-static field 'r' from static method 'main'
        // ...
    }
}</code>
登入後複製

您嘗試直接從靜態 main 方法存取非靜態欄位 r,導致錯誤。正確的做法是創建Cerchio 類別的實例,並透過該物件存取r,如下所示:

<code class="java">public class Cerchio {
    float r; // non-static field
    float area; // non-static field
    float cfr; // non-static field
    
    public static void main(String[] args) {
        Cerchio cerchio = new Cerchio();
        cerchio.r = 5; // OK: Accessing non-static field through an object
        // ...
    }
}</code>
登入後複製

透過遵守這些規則,可以避免“Cannot Make Static Reference to Non-靜態欄位/方法”錯誤並編寫更清晰、更健壯的Java 程式碼。

以上是為什麼在 Java 中出現「無法對非靜態欄位進行靜態引用」和「無法對非靜態方法進行靜態引用」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板