靜態函式和非靜態函式的區別(靜態方法和非靜態方法)

2021-08-04 07:30:09 字數 645 閱讀 4684

首先,靜態函式

只有當程式結束的時候才從記憶體消失,生命週期長。而非靜態則是動態載入到記憶體,不需要的時候就從記憶體消失。

而呼叫類中的靜態函式,無需建立物件就可以呼叫了,因為當類初始化的時候,就已經載入了靜態函式,所以靜態函式要比物件載入的早,物件只有被建立的時候才會在堆記憶體中建立空間。

另外,靜態函式中不能使用非靜態變數,

靜態方法不可以定義this,super關鍵字(因為靜態比物件先載入,而this必須首先載入,所以導致衝突,不能使用);

非靜態函式可以訪問靜態變數。

最後呢,說明一下建立物件的載入。

a a = new b();

1:b.class 載入進方法區

2:堆記憶體開闢空間,例項變數進行預設初始化,顯示初始化。

靜態函式和非靜態函式的使用demo

public class persondemo 

}class person

person()

person(string name, int age, string gender)

// 非靜態方法

void speak()

// 靜態方法

static void run()

}

靜態函式與非靜態函式的區別

靜態成員函式和非靜態成員函式的根本區別在於有無this指標。非靜態函式由物件名或者物件指標 呼叫,呼叫時編譯器會向函式傳遞this指標 靜態成員函式則由類名 或者物件名呼叫 非靜態函式中有this指標,靜態函式中沒有this指標,不能訪問物件的成員函式,成員函式有this指標,const修飾this...

非靜態函式,非靜態變數與靜態函式,靜態變數

一 函式 函式的引入可以減少程式的目標 實現程式 的共享。但是,函式呼叫也需要一些時間和空間方面的開銷,因為呼叫函式實際上將程式執行流程轉移到被調函式中,被調函式的程式 執行完後,再返回到呼叫的地方。這種呼叫操作要求呼叫前保護現場並記憶執行的位址,返回後恢復現場,並按原來儲存的位址繼續執行。對於較長...

非靜態函式,非靜態變數與靜態函式,靜態變數

非靜態函式,非靜態變數與靜態函式,靜態變數 一 函式 函式的引入可以減少程式的目標 實現程式 的共享。但是,函式呼叫也需要一些時間和空間方面的開銷,因為呼叫函式實際上將程式執行流程轉移到被調函式中,被調函式的程式 執行完後,再返回到呼叫的地方。這種呼叫操作要求呼叫前保護現場並記憶執行的位址,返回後恢...