關於Non-static method xx cannot be referenced from a static context的分析與解決方案

来源:https://www.cnblogs.com/FrankFaner/archive/2022/09/16/16699882.html
-Advertisement-
Play Games

關於static method的解釋 想要解決上面的報錯,我們首先需要瞭解什麼叫做static method(靜態方法)。 靜態方法為類所有,一般情況下我們通過類來使用(而對於不加static的實例方法我們則只能通過對象的來調用)。 以下我們通過一些代碼的例子來對此進行說明: ## 在同一類裡面調用 ...


關於static method的解釋


想要解決上面的報錯,我們首先需要瞭解什麼叫做static method(靜態方法)。

靜態方法為類所有,一般情況下我們通過類來使用(而對於不加static的實例方法我們則只能通過對象的來調用)。
以下我們通過一些代碼的例子來對此進行說明:

在同一類裡面調用靜態方法與實例方法的區別:

點擊查看代碼
public class Main{
	public static viod main(String[] args){
	//Test01();//直接調用Test01會報Non-static method xx cannot be referenced from a static context.
	//用如下方式調用Test01
	Main m=new Main();
	m.Test01();
	
	//Test02可以直接調用,通過類
	Main.Test02();
	
	}
	public viod Test01(){
	System.out.println("此方法為非靜態方法")
	}
	
	public static viod Test02(){
	System.out.println("此方法為靜態方法")
	}
}

通過上面的代碼不難看出我們的**main()方法是靜態的**,如果要在 main() 方法中調用本類中的其他方法,則該方法也必須是靜態的,否則需要先創建本類的實例對象,然後再通過對象調用該成員方法。

在不同類裡面調用靜態方法與實例方法的區別:

點擊查看代碼
public class Main{
	public static viod main(String[] args){
		TestNonStatic.Test01();//會報錯,不能直接引用其他類的非靜態方法
		TestNonStatic testnonstatic=new TestNonStatic();
		TestNonStatic.Test01;//依然可以通過創建一個實體對象來訪問。
		TestNonStatic.Test02();
	}
}

class TestNonStatic{
	viod Test01(){
	System.out.println("其他類中的實例方法")
	}
	static void Test02(){
	System.out.printlin("其他類中的靜態方法")
	}
}

通過以上代碼不難看出靜態方法與實例方法的主要區別在於是否需要創建一個對象來引用所對應的方法。只要滿足封裝的條件在同一類或者不同類均不影響調用。(從記憶體模型上來講,我們的靜態成員是處於堆中的,已經被分配了記憶體,所以我們可以直接對其進行調用。而非靜態成員是沒有被分配記憶體的,只有當他們被對象化,實例化才能被我們調用)。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 享元模式(Flyweight Pattern)主要用於減少創建對象的數量,以減少記憶體占用和提高性能。這種類型的設計模式屬於結構型模式,它提供了減少對象數量從而改善應用所需的對象結構的方式。 ...
  • 摘要:別名分析是編譯器理論中的一種技術,用於確定存儲位置是否可以以多種方式訪問。 本文分享自華為雲社區《編譯器優化那些事兒(6):別名分析概述》,作者:畢昇小助手。 1.簡介 別名分析是編譯器理論中的一種技術,用於確定存儲位置是否可以以多種方式訪問。如果兩個指針指向相同的位置,則稱這兩個指針為別名。 ...
  • 《阿裡巴巴Java開發手冊》的願景是碼出高效,碼出質量。它結合作者的開發經驗和架構歷程,提煉阿裡巴巴集團技術團隊的集體編程經驗和軟體設計智慧,濃縮成為立體的編程規範和最佳實踐 《碼出高效:Java 開發手冊》源於影響了全球250萬名開發工程師的《阿裡巴巴Java開發手冊》,作者靜心沉澱,對Java規... ...
  • 目錄 一.OpenGL ES 版本 二.嵌入式設備的 OpenGL ES 版本 三.不同 OpenGL ES GLSL 腳本區別 1.OpenGL ES 1.0 不支持腳本 2.OpenGL ES 2.0 GLSL 腳本 3.OpenGL ES 3.0 GLSL 腳本 四.OpenGL ES 和 O ...
  • 首先推薦《高性能 MySQL》,這本書是 MySQL 領域的經典之作,擁有廣泛的影響力。不但適合資料庫管理員(DBA)閱讀,也適合開發人員參考學習。不管是資料庫新手還是專家,都能從本書中有所收穫。 其次如果你對 MySQL 的內部原理有興趣的話,可以看一下這本書《MySQL 技術內幕:InnoDB ... ...
  • 如果你是準備自學Python或者正在學習,你應該能用得上: ① Python所有方向的學習路線圖,清楚各個方向要學什麼東西 ② 80多節Python課程視頻,涵蓋必備基礎、爬蟲和數據分析 ③ 100多個Python項目源碼,學習不再是只會理論 ④ 龍叔寫的獨家Python圖文教程,手機也能學習 ⑤ ...
  • 前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 又到了學Python時刻~ 第三方模塊: requests >>> pip install requests 如果安裝python第三方模塊: win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip instal ...
  • 基本概念 持續集成 (Continuous Intergration) ​ 持續集成的重點在於構建編譯及測試,開發人員每天要提交很多次代碼到分支,在分支合併到主幹前,需要通過編譯和測試識別出問題。持續集成的流程就是通過自動化的構建(主要是構建編譯、自動化測試)來驗證,從而儘早地發現集成錯誤。 持續集 ...
一周排行
    -Advertisement-
    Play Games
  • 在C#中使用SQL Server實現事務的ACID(原子性、一致性、隔離性、持久性)屬性和使用資料庫鎖(悲觀鎖和樂觀鎖)時,你可以通過ADO.NET的SqlConnection和SqlTransaction類來實現。下麵是一些示例和概念說明。 實現ACID事務 ACID屬性是事務處理的四個基本特征, ...
  • 我們在《SqlSugar開發框架》中,Winform界面開發部分往往也用到了自定義的用戶控制項,對應一些特殊的界面或者常用到的一些局部界面內容,我們可以使用自定義的用戶控制項來提高界面的統一性,同時也增強了使用的便利性。如我們Winform界面中用到的分頁控制項、附件顯示內容、以及一些公司、部門、菜單的下... ...
  • 在本篇教程中,我們學習瞭如何在 Taurus.MVC WebMVC 中進行數據綁定操作。我們還學習瞭如何使用 ${屬性名稱} CMS 語法來綁定頁面上的元素與 Model 中的屬性。通過這些步驟,我們成功實現了一個簡單的數據綁定示例。 ...
  • 是在MVVM中用來傳遞消息的一種方式。它是在MVVMLight框架中提供的一個實現了IMessenger介面的類,可以用來在ViewModel之間、ViewModel和View之間傳遞消息。 Send 接受一個泛型參數,表示要發送的消息內容。 Register 方法用於註冊某個對象接收消息。 pub ...
  • 概述:在WPF中,通過EventHandler可實現基礎和高級的UI更新方式。基礎用法涉及在類中定義事件,併在UI中訂閱以執行更新操作。高級用法藉助Dispatcher類,確保在非UI線程上執行操作後,通過UI線程更新界面。這兩種方法提供了靈活而可靠的UI更新機制。 在WPF(Windows Pre ...
  • 概述:本文介紹了在C#程式開發中如何利用自定義擴展方法測量代碼執行時間。通過使用簡單的Action委托,開發者可以輕鬆獲取代碼塊的執行時間,幫助優化性能、驗證演算法效率以及監控系統性能。這種通用方法提供了一種便捷而有效的方式,有助於提高開發效率和代碼質量。 在軟體開發中,瞭解代碼執行時間是優化程式性能 ...
  • 概述:Cron表達式是一種強大的定時任務調度工具,通過配置不同欄位實現靈活的時間規定。在.NET中,Quartz庫提供了簡便的方式配置Cron表達式,實現精準的定時任務調度。這種靈活性和可擴展性使得開發者能夠根據需求輕鬆地制定和管理定時任務,例如每天備份系統日誌或其他重要操作。 Cron表達式詳解 ...
  • 概述:.NET提供多種定時器,如System.Windows.Forms.Timer適用於UI,System.Web.UI.Timer用於Web,System.Diagnostics.Timer用於性能監控,System.Threading.Timer和System.Timers.Timer用於一般 ...
  • 問題背景 有同事聯繫我說,在生產環境上,訪問不了我負責的common服務,然後我去檢查common服務的health endpoint, 沒問題,然後我問了下異常,timeout導致的System.OperationCanceledException。那大概率是客戶端的問題,會不會是埠耗盡,用ne ...
  • 前言: 在本篇 Taurus.MVC WebMVC 入門開發教程的第四篇文章中, 我們將學習如何實現數據列表的綁定,通過使用 List<Model> 來展示多個數據項。 我們將繼續使用 Taurus.Mvc 命名空間,同時探討如何在視圖中綁定並顯示一個 Model 列表。 步驟1:創建 Model ...