日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

看似简单的问题 静态方法和实例化方法的区别

發布時間:2025/7/14 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 看似简单的问题 静态方法和实例化方法的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是一個經常被時時提出來的問題,很多時候我們以為理解了、懂了,但深究一下,我們卻發現并不懂。

方法是我們每天都在寫得,很多程序員大多都使用實例化方法,而很少使用靜態方法,問原因也說不出來所以然,或者簡單的回答兩者定義的區別,靜態方法不需要new就可以使用 實例化方法需要new了以后才可以使用。。。。我們真的理解了嗎?

從實際項目開發說起,這里有開發項目的三種方式:

開發項目中把BLL和DAL分開,在BLL調用DAL的代碼。

一、在DAL中使用靜態方法,不創建實例直接調用(大概有很多人都使用這種方式開發 )

class DAL
{
public static string GetUserName(...);
}
在BLL中調用:
DAL.GetUserName();

二、在DAL中使用實例方法,采用靜態成員模式(或Singleton)通過實例來調用:
class DAL
{
public static readonly DAL dal = new DAL();
public string GetUserName(...);
}
在BLL中調用:
DAL.dal.GetUserName();

三、在DAL中使用實例方法,每次調用之前先創建DAL對象的實例:
class DAL
{
public string GetUserName(...);
}
在BLL中調用:
DAL dal = new DAL();
dal.GetUserName();

---------------------------------------------------------------

開發方式一:我以為在一些情況下(比如 調用多個數據庫、GetUserName(...)內部處理操作部分)會出現線程安全的嫌疑。這種開發方式不用New出對象,所以很普遍。

開發方式二:應該多是應用在cs模式下,DAL在整個項目只會有一個對象存在,如果出現在B/S 我想不能兼容多種問題情況。而且也有線程安全的問題。

開發方式三:應該是普遍使用的,能夠兼容各種問題,也不會有線程不安全的嫌疑出現。

特別說明一下:在MS的pet3.0以前的版本 都采用了方式二,而到pet3.0和以后的版本 都采用了方式三,而且特別在開發說明文檔中明確的解釋了一下。我想應該是從兼容性上考慮的,從性能上方式二并不比方式三真正的高多少。

-------------------------------------------------------------------------

我特意以“你怎么理解并使用靜態方法和實例化方法的?”這樣的問題詢問了多位程序員,他們開發的語言也不盡相同(c 、c++、java、c#)

以下是他們的回答:

海龍說:

公用的方法,而且是一些零散的 一般用靜態方法

張偉說:
幾乎沒有區別,如果不需要實例化,就用靜態方法;如果為了穩妥,就用實例方法,這樣才可調用其他實例方法和變量 。

蕭遠山說:
靜態方法比較少用,因為他在一啟動就實例化了,比較占資源,當然,,配合單例模式還是比較好用的
比較多的用在數據連接上,我避免使用的原則就是減少資源消耗。

張新波說:
靜態方法意味著我在調用前不需要進行對其所屬的類進行new操作,我主要會在工具類里面用到靜態方法。


向詳說:
靜態就是類的,實例就是對象的。
靜態方法和實例方法的區別之處還有一個地方:靜態方法不需要依賴類當中的屬性,能在這個方法中封閉的完成一個功能。實例方法更多的會使用到類當中的屬性。

winson_張林說:
最大的區別在于內存。
靜態方法在程序開始時生成內存,實例方法在程序運行中生成內存,
所以靜態方法可以直接調用,實例方法要先成生實例,通過實例調用方法,靜態速度很快,但是多了會占內存。
任何語言都是對內存和磁盤的操作,至于是否面向對象,只是軟件層的問題,底層都是一樣的,只是實現方法不同。
靜態內存是連續的,因為是在程序開始時就生成了,而實例申請的是離散的空間,所以當然沒有靜態方法快,
而且靜態內存是有限制的,太多了程序會啟動不了。

showlover說:
靜態方法與實例方法各有自己的用處...

是定義成靜態方法,還是定義成實例方法,還要看具體情況,比如方法本身與類型沒有太大的關系,可以定義成靜態方法..

用實例方法,當然需要你先創建實例,才能調用實例方法,而靜態方法則不需要..

從性能上說,靜態方法效率要稍微高一些,但是它會常駐內存...
一些情況下使用靜態方法是有好處的,因為對于靜態方法無論你有多少個實例,
內存中要維護的一份拷貝。同時,某些方法,確實使用靜態是比較恰當的..

Q.yuhen說:
這個問題牽扯到的東西比較多,諸如設計模式等等。簡單點說,靜態方法用來執行無狀態的一個完整操作,實例方法則相反,它通常是一個完整邏輯的一部分,并且需要維護一定的狀態值。
如果用內存和效率來區分使用Static Method、Instance Method 就回到過去結構化編程了。使用那種方法的根本出發點還是圍繞面向對象來進行的。

?

陳亮說:

靜態方法和全局函數差不多的,實例方法是一個類里面的方法。

?

總結:大家對這個問題都有一個共識:那就是實例化方法更多被使用和穩妥,靜態方法少使用。

有時候我們對靜態方法和實例化方法會有一些誤解。

1、大家都以為“ 靜態方法常駐內存,實例方法不是,所以靜態方法效率高但占內存。

事實上,他們都是一樣的,在加載時機和占用內存上,靜態方法和實例方法是一樣的,在類型第一次被使用時加載。調用的速度基本上沒有差別。

2、大家都以為“ 靜態方法在堆上分配內存,實例方法在堆棧上

事實上所有的方法都不可能在堆或者堆棧上分配內存,方法作為代碼是被加載到特殊的代碼內存區域,這個內存區域是不可寫的。

方法占不占用更多內存,和它是不是static沒什么關系。??
? 因為字段是用來存儲每個實例對象的信息的,所以字段會占有內存,并且因為每個實例對象的狀態都不一致(至少不能認為它們是一致的),所以每個實例對象的所以字段都會在內存中有一分拷貝,也因為這樣你才能用它們來區分你現在操作的是哪個對象。??
? 但方法不一樣,不論有多少個實例對象,它的方法的代碼都是一樣的,所以只要有一份代碼就夠了。因此無論是static還是non-static的方法,都只存在一份代碼,也就是只占用一份內存空間。??
? 同樣的代碼,為什么運行起來表現卻不一樣?這就依賴于方法所用的數據了。主要有兩種數據來源,一種就是通過方法的參數傳進來,另一種就是使用class的成員變量的值……

3、大家都以為“實例方法需要先創建實例才可以調用,比較麻煩,靜態方法不用,比較簡單

事實上如果一個方法與他所在類的實例對象無關,那么它就應該是靜態的,而不應該把它寫成實例方法。所以所有的實例方法都與實例有關,既然與實例有關,那么創建實例就是必然的步驟,沒有麻煩簡單一說。

當然你完全可以把所有的實例方法都寫成靜態的,將實例作為參數傳入即可,一般情況下可能不會出什么問題。

從面向對象的角度上來說,在抉擇使用實例化方法或靜態方法時,應該根據是否該方法和實例化對象具有邏輯上的相關性,如果是就應該使用實例化對象? 反之使用靜態方法。這只是從面向對象角度上來說的。

如果從線程安全、性能、兼容性上來看? 也是選用實例化方法為宜。

我們為什么要把方法區分為:靜態方法和實例化方法 ?

如果我們繼續深入研究的話,就要脫離技術談理論了。早期的結構化編程,幾乎所有的方法都是“靜態方法”,引入實例化方法概念是面向對象概念出現以后的事情了,區分靜態方法和實例化方法不能單單從性能上去理解,創建c++,java,c#這樣面向對象語言的大師引入實例化方法一定不是要解決什么性能、內存的問題,而是為了讓開發更加模式化、面向對象化。這樣說的話,靜態方法和實例化方式的區分是為了解決模式的問題。

拿別人一個例子說事:

?比如說“人”這個類,每個人都有姓名、年齡、性別、身高等,這些屬性就應該是非靜態的,因為每個人都的這些屬性都不相同;但人在生物學上屬于哪個門哪個綱哪個目等,這個屬性是屬于整個人類,所以就應該是靜態的——它不依賴與某個特定的人,不會有某個人是“脊椎動物門哺乳動物綱靈長目”而某個人卻是“偶蹄目”的。

轉載于:https://www.cnblogs.com/window07/archive/2009/06/08/1499070.html

總結

以上是生活随笔為你收集整理的看似简单的问题 静态方法和实例化方法的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 婷婷色九月 | 探花国产精品一区二区 | 国产精品自拍在线 | 波多野结衣在线播放视频 | 国产午夜精品在线 | 97人妻精品一区二区 | 麻豆porn| 羞羞草影院 | 亚洲高清视频在线观看 | 精品少妇久久久 | 中文字幕一区二区人妻痴汉电车 | 黄网站免费在线观看 | 广州毛片| 国产美女被遭强高潮免费网站 | 波多野吉衣在线观看视频 | 中文字幕丰满孑伦无码专区 | 午夜男人天堂 | 亚洲天堂久| 国产一级做a爱免费视频 | 精品国产视频一区二区三区 | 久久美女av | 懂色av一区二区 | 欧美亚洲国产成人 | 中文字幕第2页 | 越南毛茸茸的少妇 | 精品影片一区二区入口 | 久久久久一区二区精码av少妇 | 涩涩999| av片在线观看 | 无码免费一区二区三区免费播放 | 国产老肥熟 | 99视频在线精品免费观看2 | 久久精品99 | 丝袜一级片 | 97av视频 | 日韩欧美在线中文字幕 | 另类专区欧美 | 五月婷婷婷婷 | 精品视频一区二区三区四区 | 国产男男gay体育生网站 | 亚洲人天堂 | 99这里 | 亚洲永久免费视频 | 国产欧美日韩三区 | 狠狠网 | 日韩一区二区三区四区五区六区 | 99热亚洲 | 日日夜夜噜噜噜 | 久久精品国产露脸对白 | 国产成人短视频在线观看 | 国产激情视频一区 | 国产91绿帽单男绿奴 | 黄色xxxxx | 国产在线观看a | 午夜激情欧美 | 冲田杏梨av | www.人人干 | 成人av电影网站 | 日韩欧美一二三 | 久草资源网站 | 欧美一级视频 | 成人合集 | 特黄aaaaaaaaa真人毛片 | 午夜在线视频播放 | 日本美女全裸 | 午夜两性| 欧美激情动态图 | 亚洲性一区 | 日韩一区二区三区在线免费观看 | 玉米地疯狂的吸允她的奶视频 | 中文字幕第一页在线视频 | 亚洲欧美综合另类自拍 | 99色婷婷 | 欧美日韩一区二区三区四区五区 | 精品91久久久 | 中出在线播放 | 中文字幕日本在线 | 国产又粗又猛又爽又黄的视频一 | 又粗又猛又爽又黄的视频 | 自拍视频网址 | 草碰在线视频 | 欧美人与性动交α欧美片 | 越南少妇做受xxx片 亚洲av综合色区无码一二三区 | 深夜成人在线观看 | 神马久久av | 亚洲小视频在线播放 | 国产99在线 | a在线免费 | 东京热毛片 | 黄色成人免费网站 | 天堂在线资源8 | 天天精品 | 在线播放日韩av | 国产精品无码一本二本三本色 | 久久国产精品久久久久 | 国产成人av一区二区三区不卡 | 午夜激情久久 | 日韩电影网站 | 成人免费公开视频 |