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