關於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
  • 前言 當別人做大數據用Java、Python的時候,我使用.NET做大數據、數據挖掘,這確實是值得一說的事。 寫的並不全面,但都是實際工作中的內容。 .NET在大數據項目中,可以做什麼? 寫腳本(使用控制台程式+頂級語句) 寫工具(使用Winform) 寫介面、寫服務 使用C#寫代碼的優點是什麼? ...
  • 前言 本文寫給想學C#的朋友,目的是以儘快的速度入門 C#好學嗎? 對於這個問題,我以前的回答是:好學!但仔細想想,不是這麼回事,對於新手來說,C#沒有那麼好學。 反而學Java還要容易一些,學Java Web就行了,就是SpringBoot那一套。 但是C#方向比較多,你是學控制台程式、WebAP ...
  • 某一日晚上上線,測試同學在回歸項目黃金流程時,有一個工單項目介面報JSF序列化錯誤,馬上升級對應的client包版本,編譯部署後錯誤消失。 線上問題是解決了,但是作為程式員要瞭解問題發生的原因和本質。但這都是為什麼呢? ...
  • 本文介紹基於Python語言中TensorFlow的Keras介面,實現深度神經網路回歸的方法。 1 寫在前面 前期一篇文章Python TensorFlow深度學習回歸代碼:DNNRegressor詳細介紹了基於TensorFlow tf.estimator介面的深度學習網路;而在TensorFl ...
  • 前段時間因業務需要完成了一個工作流組件的編碼工作。藉著這個機會跟大家分享一下整個創作過程,希望大家喜歡,組件暫且命名為"easyFlowable"。 接下來的文章我將從什麼是工作流、為什麼要自研這個工作流組件、架構設計三個維度跟大家來做個整體介紹。 ...
  • 1 簡介 我們之前使用了dapr的本地托管模式,但在生產中我們一般使用Kubernetes托管,本文介紹如何在GKE(GCP Kubernetes)安裝dapr。 相關文章: dapr本地托管的服務調用體驗與Java SDK的Spring Boot整合 dapr入門與本地托管模式嘗試 2 安裝GKE ...
  • 摘要:在jvm中有很多的參數可以進行設置,這樣可以讓jvm在各種環境中都能夠高效的運行。絕大部分的參數保持預設即可。 本文分享自華為雲社區《為什麼需要對jvm進行優化,jvm運行參數之標準參數》,作者:共飲一杯無。 我們為什麼要對jvm做優化? 在本地開發環境中我們很少會遇到需要對jvm進行優化的需 ...
  • 背景 我們的業務共使用11台(阿裡雲)伺服器,使用SpringcloudAlibaba構建微服務集群,共計60個微服務,全部註冊在同一個Nacos集群 流量轉發路徑: nginx->spring-gateway->業務微服務 使用的版本如下: spring-boot.version:2.2.5.RE ...
  • 基於php+webuploader的大文件分片上傳,帶進度條,支持斷點續傳(刷新、關閉頁面、重新上傳、網路中斷等情況)。文件上傳前先檢測該文件是否已上傳,如果已上傳提示“文件已存在”,如果未上傳則直接上傳。視頻上傳時會根據設定的參數(分片大小、分片數量)進行上傳,上傳過程中會在目標文件夾中生成一個臨 ...
  • 基於php大文件分片上傳至七牛雲,使用的是七牛雲js-sdk V2版本,引入js文件,配置簡單,可以暫停,暫停後支持斷點續傳(刷新、關閉頁面、重新上傳、網路中斷等情況),可以配置分片大小和分片數量,官方文檔https://developer.qiniu.com/kodo/6889/javascrip ...