一個static方法內可以呼叫非static方法嗎?
不可以。
因為非 static 方法是要與物件關聯在一起的,必須建立一個物件後,才可以在該物件上進行方法呼叫,而 static 方法呼叫時不需要建立物件,可以直接呼叫。
也就是說,當一個 static 方法被呼叫時,可能還沒有建立任何例項物件,如果從一個 static 方法中發出對非 static 方法的呼叫,那個非 static 方法關聯到那個物件上的呢?這個邏輯無法成立,所以,一個 static 方法內部不能發出對非 static 方法的呼叫。
static 方法是靜態方法,是屬於類的方法,非 static 方法是屬於物件的方法,所以在 static 方法中想要呼叫非 static 方法,要先新建立一個物件,再有這個物件來呼叫非 static 方法。
本質是 jvm 載入順序約定的,載入 static 方法的時候非靜態方法還沒初始化,當然不能呼叫了。
相關推薦
為什麼不能從靜態的方法裡面呼叫非靜態方法,或變數?
程式最終都將在記憶體中執行,變數只有在記憶體中佔有一席之地時才能被訪問。類的靜態成員(變數和方法)屬於類本身,在類載入的時候就會分配記憶體,可以通過類名直接去訪問;非靜態成員(變數和方法)屬於類的物件,所以只有在類的物件產生(建立類的例項)時才會分配記憶體,然後通過類
靜態方法中呼叫非靜態方法
我們都知道,靜態static方法中不能呼叫非靜態non-static方法,準確地說是不能直接呼叫non-static方法。但是可以通過將一個物件的引用傳入static方法中,再去呼叫該物件的non-static方法。 其實這個事實的應用很經常,以至於我
一個static方法內可以呼叫非static方法嗎?
不可以。 因為非 static 方法是要與物件關聯在一起的,必須建立一個物件後,才可以在該物件上進行方法呼叫,而 static 方法呼叫時不需要建立物件,可以直接呼叫。 也就是說,當一個 static 方法被呼叫時,可能還沒有建立任何例項物件,如果從一個 static 方法中發出對非
static不能直接呼叫非static
一個方法用static修飾,便是靜態方法或類方法。靜態方法不屬於特定物件。 由於static方法在裝載class時首先完成,比構造方法早,此時非static屬性和方法還沒有完成初始化。 所以,在static方法內部無法直接呼叫非static方法(可以通過先例項化物件,再用該物件呼叫非stat
【PHP】靜態方法呼叫非靜態方法和靜態呼叫非靜態方法程式碼解讀
static 關鍵字用來修飾屬性、方法,稱這些屬性、方法為靜態屬性、靜態方法。 在類的靜態方法中是不能直接以$this->test()的方式呼叫非靜態方法的。還有框架中靜態的呼叫非靜態方法是怎麼回事??? 。。。 算了,不知道說啥 具體為啥看程式碼註釋: <?ph
Java靜態方法呼叫非靜態方法
靜態方法(static mehod)不能直接呼叫非靜態方法(non-static method),可以通過一個物件的引用傳入靜態方法中,再去呼叫該物件的非靜態方法。在主函式(static方法)中,經常建立某個類的例項,再利用其引用變數呼叫他的非靜態方法。 public cl
java中靜態方法為什麼不可以呼叫非靜態方法
重點:static關鍵字的修飾成員變數,成員方法和物件無關。 static修飾的內容是隨著類的載入而載入的,且只加載一次。 它儲存於一塊固定的記憶體區域(靜態區),所以,可以直接被類名呼叫。 它優先於物件存在,所以,可以被所有物件共享。 static可
java中靜態方法中為什麼不能使用this、super和直接呼叫非靜態方法
這個要從java的記憶體機制去分析,首先當你New 一個物件的時候,並不是先在堆中為物件開闢記憶體空間,而是先將類中的靜態方法(帶有static修飾的靜態函式)的程式碼載入到一個叫做方法區的地方,然後再在堆記憶體中建立物件。所以說靜態方法會隨著類的載入而被載入。當你new一個物件時,該物件存在於對
(23)物件呼叫非靜態方法執行過程、靜態方法呼叫記憶體執行過程
public class Person{ private String name; private int age; private static String country="cn
Java關於方法內呼叫private變數的問題
先上程式碼: package yerasel; public class MyTest { private int i; public MyTest(int x) { this.i =
靜態方法不能呼叫非靜態方法的原因
1.靜態方法優先於物件被建立2.非靜態方法通過物件建立3.靜態方法在記憶體中建立後,還沒有建立物件,所以不能呼叫非靜態方法和變數。//null 型別呼叫靜態方法,輸出什麼?public class Test{private static void Print(){System
為什麼靜態方法無法呼叫非靜態成員(方法和變數)
當New 一個物件的時候,並不是先在堆中為物件開闢記憶體空間,而是先將類中的靜態方法(帶有static修飾的靜態函式)的程式碼載入到一個叫做方法區的地方,然後 再在堆記憶體中建立物件。所以說靜態方法會隨著類的載入而被載入。當你new一個物件時,該物件存在於對記憶體中,this
Qt for android如何在靜態java類中呼叫非靜態方法
一般正常情況開發下,在java的靜態類方法中,呼叫一個非靜態方法是會報錯,編譯不通過的,但是在Qt呼叫Java正常函式會不生效,不會出現任何異常提示,反正呼叫了就跟沒呼叫一樣,這個是我再Qt5.6中測試過的效果,現在Qt5.9不知道修復了這個問題沒有,反正現在
C++Static 靜態函式呼叫非靜態函式
test.h class test : { public: test(void); ~test(void); public: //你的其他函式 ... ..
java靜態方法不能呼叫非靜態方法的原因
靜態方法是屬於類的,即靜態方法是隨著類的載入而載入的,在載入類時,程式就會為靜態方法分配記憶體,而非靜態方法是屬於物件的,物件是在類載入之後建立的,也就是說靜態方法先於物件存在,當你建立一個物件時,程式為其在堆中分配記憶體,一般是通過this指標來指向該物件。靜態方法不依
重寫父類方法,重寫父類方法與呼叫父類方法
class Animal: def eat(self): print("-----吃-----") def drink(self): print("-----喝-----") class Dog(Animal): def bark(self): print("-----汪汪
為什麼大型網站都採用get方法,而非post方法
本文轉自:http://blog.csdn.net/findsafety/article/details/47129021 在網上摘到一段比較有用的話 減低伺服器流量壓力 根據 HTTP 規範,GET 用於資訊獲取,而且應該是 安全的和 冪等的。所謂安全的意味著該操作用
java synchronized同步靜態方法和同步非靜態方法的區別與舉例
synchronized關鍵字是java併發程式設計中為了解決執行緒對共享資源的競爭造成錯誤,而提供的解決方案。synchronized關鍵字有兩種用法,一種是隻用於方法的定義中,另外一種是synchronized塊,我們不僅可以使用synchronized來同步一個物件
java synchronized同步靜態方法和同步非靜態方法的異同
-------------------轉自CSDN lonely_fireworks 的部落格----------------------- synchronized關鍵字有兩種用法,一種是隻用於方法的定義中,另外一種是synchronized塊,我們不僅可以使用synchr
JNI-Thread中start方法的呼叫與run方法的回撥分析
### **前言** 在java程式設計中,執行緒Thread是我們經常使用的類。那麼建立一個Thread的本質究竟是什麼,本文就此問題作一個探索。 內容主要分為以下幾個部分 1.JNI機制的使用 2.Thread建立執行緒的底層呼叫分析 3.系統執行緒的使用 4.Thread中run方法的回撥分