php性能優(yōu)化 靜態(tài)方法和非靜態(tài)方法的區(qū)別是什么?
靜態(tài)方法和非靜態(tài)方法的區(qū)別是什么?沒(méi)有此項(xiàng)的靜態(tài)方法不能引用非靜態(tài)變量或方法,而只能引用其自身方法體中定義的成員和參數(shù)。子類(lèi)不允許重寫(xiě)靜態(tài)方法,但子類(lèi)可以重寫(xiě)父類(lèi)的靜態(tài)方法。子類(lèi)不能將父類(lèi)中的非靜態(tài)方
靜態(tài)方法和非靜態(tài)方法的區(qū)別是什么?
沒(méi)有此項(xiàng)的靜態(tài)方法不能引用非靜態(tài)變量或方法,而只能引用其自身方法體中定義的成員和參數(shù)。子類(lèi)不允許重寫(xiě)靜態(tài)方法,但子類(lèi)可以重寫(xiě)父類(lèi)的靜態(tài)方法。子類(lèi)不能將父類(lèi)中的非靜態(tài)方法重寫(xiě)為靜態(tài)方法。主要方法也是靜態(tài)方法。要在主方法中訪(fǎng)問(wèn)類(lèi)的成員變量和方法,需要在方法體中創(chuàng)建該類(lèi)的對(duì)象
在創(chuàng)建對(duì)象之前可以使用靜態(tài)方法,必須通過(guò)新對(duì)象調(diào)用非靜態(tài)方法。
例如:
public class per{
public static string GetType(){
return “human”]}
]public string getname(){
return “Zhang San”]}
在沒(méi)有新對(duì)象之前,可以這樣使用上述類(lèi)中的GetType方法:
string type=每種類(lèi)型()//類(lèi)型=“人類(lèi)”
但是getname方法不能這樣使用,編譯也不會(huì)通過(guò)
getname必須是這樣:
per P=new per()
string name=P.getname()//name=“Zhang San”
當(dāng)然,GetType方法也可以通過(guò)object調(diào)用:
string Type=p.GetType()//Type=“human”
總之:
靜態(tài)方法在創(chuàng)建實(shí)例之前存在,而非靜態(tài)方法在創(chuàng)建對(duì)象之后存在。
靜態(tài)方法和非靜態(tài)方法的區(qū)別?
靜態(tài)方法和非靜態(tài)方法之間的區(qū)別總結(jié)如下:
1。靜態(tài)方法屬于一個(gè)類(lèi),可以在類(lèi)實(shí)例化之前使用;
2。非靜態(tài)方法可以訪(fǎng)問(wèn)類(lèi)的任何成員,而靜態(tài)方法只能訪(fǎng)問(wèn)類(lèi)的靜態(tài)成員;
3。因?yàn)殪o態(tài)方法可以在類(lèi)實(shí)例化之前使用,而類(lèi)中的非靜態(tài)變量只能在類(lèi)實(shí)例化之后使用分配內(nèi)存;
4。靜態(tài)變量和其他靜態(tài)方法只能出現(xiàn)在靜態(tài)方法中,而this和其他關(guān)鍵字不能在靜態(tài)方法中使用,因?yàn)樗鼘儆谡麄€(gè)類(lèi);
5。靜態(tài)方法比實(shí)例化更有效。靜態(tài)方法的缺點(diǎn)是它們不會(huì)自動(dòng)銷(xiāo)毀,但是實(shí)例化的方法可以銷(xiāo)毀;
6。靜態(tài)方法和靜態(tài)變量在創(chuàng)建后總是使用相同的內(nèi)存塊進(jìn)行銷(xiāo)毀,而使用實(shí)例創(chuàng)建多個(gè)內(nèi)存。主要區(qū)別:靜態(tài)方法可以在創(chuàng)建對(duì)象之前使用,非靜態(tài)方法必須通過(guò)新對(duì)象調(diào)用。例如:在沒(méi)有新對(duì)象之前,publicclassper{publicstaticstringgettype(){return“human”}publicstringgetname(){return“Zhang San”}的上述類(lèi)中的GetType方法可以這樣使用:stringtype=每種類(lèi)型()//type=“human”,但getname方法不能以這種方式使用。編譯不會(huì)通過(guò)。Getname必須是這樣的:perp=newper()stringname=p.Getname()//Na當(dāng)然,GetType方法也可以通過(guò)對(duì)象調(diào)用:stringtype=p.GetType()//type=“human”