摘要:在加載時(shí)機(jī)和占用內(nèi)存上,靜態(tài)方法和實(shí)例方法是一樣的,在類型第一次被使用時(shí)加載。從面向?qū)ο蟮慕嵌壬蟻碚f,在抉擇使用實(shí)例化方法或靜態(tài)方法時(shí),應(yīng)該根據(jù)是否該方法和實(shí)例化對象具有邏輯上的相關(guān)性,如果是就應(yīng)該使用實(shí)例化對象反之使用靜態(tài)方法。
1、在加載時(shí)機(jī)和占用內(nèi)存上,靜態(tài)方法和實(shí)例方法是一樣的,在類型第一次被使用時(shí)加載。調(diào)用的速度基本上沒有差別。
2、方法不可能在堆或者堆棧上分配內(nèi)存,方法作為代碼是被加載到特殊的代碼內(nèi)存區(qū)域,這個(gè)內(nèi)存區(qū)域是不可寫的。
方法占不占用更多內(nèi)存,和它是不是static沒什么關(guān)系。
因?yàn)樽侄问怯脕泶鎯?chǔ)每個(gè)實(shí)例對象的信息的,所以字段會(huì)占有內(nèi)存,并且因?yàn)槊總€(gè)實(shí)例對象的狀態(tài)都不一致(至少不能認(rèn)為它們是一致的),所以每個(gè)實(shí)例對象的所有字段都會(huì)在內(nèi)存中有一分拷貝,也因?yàn)檫@樣你才能用它們來區(qū)分你現(xiàn)在操作的是哪個(gè)對象。
但方法不一樣,不論有多少個(gè)實(shí)例對象,它的方法的代碼都是一樣的,所以只要有一份代碼就夠了。因此無論是static還是non-static的方法,都只存在一份代碼,也就是只占用一份內(nèi)存空間。
同樣的代碼,為什么運(yùn)行起來表現(xiàn)卻不一樣?這就依賴于方法所用的數(shù)據(jù)了。主要有兩種數(shù)據(jù)來源,一種就是通過方法的參數(shù)傳進(jìn)來,另一種就是使用class的成員變量的值……
3、如果一個(gè)方法與他所在類的實(shí)例對象無關(guān),那么它就應(yīng)該是靜態(tài)的,而不應(yīng)該把它寫成實(shí)例方法。所以所有的實(shí)例方法都與實(shí)例有關(guān),既然與實(shí)例有關(guān),那么創(chuàng)建實(shí)例就是必然的步驟,沒有麻煩簡單一說。
當(dāng)然你完全可以把所有的實(shí)例方法都寫成靜態(tài)的,將實(shí)例作為參數(shù)傳入即可,一般情況下可能不會(huì)出什么問題。
從面向?qū)ο蟮慕嵌壬蟻碚f,在抉擇使用實(shí)例化方法或靜態(tài)方法時(shí),應(yīng)該根據(jù)是否該方法和實(shí)例化對象具有邏輯上的相關(guān)性,如果是就應(yīng)該使用實(shí)例化對象 反之使用靜態(tài)方法。這只是從面向?qū)ο蠼嵌壬蟻碚f的。
如果從線程安全、性能、兼容性上來看 也是選用實(shí)例化方法為宜。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/29649.html
摘要:最近在備戰(zhàn)面試的過程中,整理一下面試題。成員變量如果沒有被賦初值,則會(huì)自動(dòng)以類型的默認(rèn)值而賦值一種情況例外被修飾但沒有被修飾的成員變量必須顯示地賦值而局部變量則不會(huì)自動(dòng)賦值。 最近在備戰(zhàn)面試的過程中,整理一下面試題。大多數(shù)題目都是自己手敲的,網(wǎng)上也有很多這樣的總結(jié)。自己感覺總是很亂,所以花了很久把自己覺得重要的東西總結(jié)了一下。 面向?qū)ο蠛兔嫦蜻^程的區(qū)別 面向過程: 優(yōu)點(diǎn):性能比面...
摘要:內(nèi)部類的作用成員內(nèi)部類成員內(nèi)部類可以無條件訪問外部類的所有成員屬性和成員方法包括成員和靜態(tài)成員。匿名內(nèi)部類匿名內(nèi)部類就是沒有名字的內(nèi)部類靜態(tài)內(nèi)部類指被聲明為的內(nèi)部類,他可以不依賴內(nèi)部類而實(shí)例,而通常的內(nèi)部類需要實(shí)例化外部類,從而實(shí)例化。 大部分開發(fā)者進(jìn)入公司,一個(gè)必備的環(huán)節(jié)就是面試,只有通過面試,才能知道求職者是否符合公司的要求,也只有通過面試,求職者才能有幸進(jìn)入到企業(yè)里工作,那么怎么...
摘要:單例模式的懶漢實(shí)現(xiàn)線程安全通過設(shè)置同步方法,效率太低,整個(gè)方法被加鎖模擬在創(chuàng)建對象之前做一些準(zhǔn)備工作使用上面的測試類,測試結(jié)果可以看到,這種方式達(dá)到了線程安全。可以說這種方式是實(shí)現(xiàn)單例模式的最優(yōu)解。 1. 什么是單例模式 單例模式指的是在應(yīng)用整個(gè)生命周期內(nèi)只能存在一個(gè)實(shí)例。單例模式是一種被廣泛使用的設(shè)計(jì)模式。他有很多好處,能夠避免實(shí)例對象的重復(fù)創(chuàng)建,減少創(chuàng)建實(shí)例的系統(tǒng)開銷,節(jié)省內(nèi)存。 ...
摘要:語言通過字節(jié)碼的方式,在一定程度上解決了傳統(tǒng)解釋型語言執(zhí)行效率低的問題,同時(shí)又保留了解釋型語言可移植的特點(diǎn)。有針對不同系統(tǒng)的特定實(shí)現(xiàn),,,目的是使用相同的字節(jié)碼,它們都會(huì)給出相同的結(jié)果。項(xiàng)目主要基于捐贈(zèng)的源代碼。 本文來自于我的慕課網(wǎng)手記:Java編程中那些再熟悉不過的知識點(diǎn),轉(zhuǎn)載請保留鏈接 ;) 1. 面向?qū)ο蠛兔嫦蜻^程的區(qū)別 面向過程 優(yōu)點(diǎn): 性能比面向?qū)ο蟾摺R驗(yàn)轭愓{(diào)用時(shí)需要實(shí)例...
閱讀 2731·2021-11-24 09:39
閱讀 1647·2021-09-28 09:35
閱讀 1119·2021-09-06 15:02
閱讀 1307·2021-07-25 21:37
閱讀 2726·2019-08-30 15:53
閱讀 3643·2019-08-30 14:07
閱讀 714·2019-08-30 11:07
閱讀 3512·2019-08-29 18:36