關於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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...