報錯 non-static method xxx() cannot be referenced from a static context

報錯原因:

static方法不能直接使用類變量和類方法

解決辦法:

1.將變量和方法加static修飾符

2.將類實例化,調用實例化後的變量和方法

 

任何程序最終都是在內存中執行的,變量只有在內存中佔有一席之地時才能被訪問,不在內存中的變量就不能被訪問。類的靜態成員(變量和方法)都屬於類本身,在類加載的時候就會分配內存,可以通過類名直接訪問;

非靜態成員(變量和方法)屬於類的對象,所以只有在類的對象產生(創建類的實例)時纔會分配內存,然後通過類的對象(實例)去訪問。

由於靜態成員在類加載的時候就會被分配內存,而非靜態成員則不會。因此,在一個類的靜態成員中去訪問其非靜態成員會出錯,是因爲在類的非靜態成員不存在的時候,類的靜態成員就已經存在了,訪問一個內存中不存在的東西當然會出錯。

而類又是在什麼時候加載的呢?核心類(比如String類)在 JVM 啓動時(main 方法開始執行前)就會被加載,其它類在使用前(實例化對象、調用其靜態方法、訪問靜態域等前)會被動態加載。

需注意:子類被加載前,它的所有超類要根據由父到子的順序被逐一加載。

發佈了73 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章