亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

TIJ英文原版書籍閱讀之旅——Chapter Five:Initialization & Cleanup

2019-11-15 00:33:21
字體:
來源:轉載
供稿:網友
TIJ英文原版書籍閱讀之旅——Chapter Five:Initialization & Cleanup 2015-06-10 19:55 by 海峰 :), ... 閱讀, ... 評論, 收藏, 編輯

Methodoverloading

|_Distinguishingoverloadedmethods

Ifthemethodshavathesamename,howcanjavaknowwhichmethodyoumean?There'sasimplerule:Eachoverloadedmethodmusttakeauniquelistofargumenttypes.

|_OverloadingwithPRimitives

Wecanknowthattheconstantvalue5istreatedasint,soifanoverloadedmethodisavailablethattakesasint,itisused.Inallothercases,ifyouhavaadatatypethatissmallerthantheargumentinthemethod,thatdatatypeispromoted.charproducesasightlydifferenteffect,sinceifitdoesn'tfindanexactcharmatch,itispromotedtoint.

Supposethemethodstakenarrowerprimitivevalues.Ifyourargumentiswider,thenyoumustperformanarrowingconversionwithacast.Ifyoudon'tdothis,thecompilerwillissueanerrormessage.

|_Overloadingonreturnvalues

void f() {}int f() {return 1;}

Ifwejustwanttocallamethodforitssideeffect,suchas:

f();

howcanJavadeterminewhichf()shouldbecalled?Andhowcouldsomeonereadingthecodeseeit?BecauSEOfthissortofproblem,youcannotusereturnvaluetypestodistinguishoverloadedmethods.

Defaultconstructors

Ifyoucreateaclassthathasnoconstructors,thecompilerwillautomaticallycreateadefaultconstructorforyou.

Ifyoudefineanyconstructors(withorwithoutarguments),thecompilerwillnotsynthesizeoneforyou.

Whenyoudon'tputinanyconstructors,it'sasifthecompilersays,"Youareboundtoneedsomeconstructorsoletmemakeoneforyou."Butifyouwriteaconstructor,thecompilersays,"You'rewrittenaconstructorsoyouknowwhatyou'redoing;ifyoudidn'tputinadefaultit'sbecauseyoumeanttoleaveitout."

ThethiskeyWord

|_callingconstructorsfromconstructors

Whileyoucancalloneconstructorusingthis,youcannotcalltwo.Inaddition,theconstructorcallmustbethefirstthingyoudo,oryou'llgetacompilererrormessage.

|_themeaningofstatic

Itmeansthatthereisnothisforthatparticularmethod.Youcannotcallnon-staticmethodsfrominsidestaticmethod(althoughthereverseispossible),andyoucancallastaticmethodfortheclassitself,withoutanyobject.Infact,that'sprimarilywhatastaticmethodiffor.

Cleanup:finalizationandgarbagecollection

Whenthegarbagecollectorisreadytoreleasethestorageusedforyourobject,itwillfirstcallfinalize(),andonlyonthenextgarbage-collectionpasswillitreclaimtheobject'smemory.

InJava,objectsdonotalwaysgetgarbagecollected.Or,putanotherway:

1、Yourobjectsmightnotgetgarbagecollected.

2、Garbagecollectionisnotdestruction.

3、Garbagecollectionisonlyaboutmemory.

Youmightfindthatthestorageforanobjectnevergetsreleasedbecauseyourprogramnevernearsthepointofrunningoutofstorage.Ifyourprogramcompletesandthegarbagecollectornevergetsaroundtoreleasingthestorageforanyofyourobjects,thatstoragewillbereturnedtotheOperatingsystemenmasseastheprogramexits.Thisisagoodthing,becausegarbagecollectionhassomeoverhead,andifyouneverdoit,youneverincurthatexpense.

|_Whatisfinalize()for?

Itwouldseemthatfinalize()isinplacebecauseofthepossibilitythatyou'lldosomethingClikebyallocatingmemoryusingamechanismotherthanthenormaloneinJava.Thiscanhappenprimarilythoughnativemethods,whichareawaytocallnon-JavacodefromJava.CandC++aretheonlylanguagescurrentlysupportedbynativemethods,butsincetheycancallsubprogramsinotherlanguages,youcaneffectivelycallanything.Insidethenon-Javacode,C'smalloc()familyoffunctionmightbecalledtoallocatestorage,andunlessyoucallfree(),thatstoragewillnotbereleased,causingamemoryleak.Ofcourse,free()isaCandC++function,soyou'dneedtocallitinanativemethodinsideyourfinalize().

Afterreadingthis,youprobablygettheideathatyouwon'tusefinalize()much(JoshuaBlochgoesfurther:"finalizesareunpredictable,oftendangerous,andgenerallyunnecessary.").Youarecorrect;itisnottheappropriateplacefornormalcleanuptooccur.Sowhereshouldnormalcleanupbeperformed?

|_Youmustperformcleanup

Ifyouwantsomekindofcleanupperformedotherthanstoragerelease,youmuststillexplicitlycallanappropriatemethodinJava,whichistheequivalentofaC++destructorwithouttheconvenience.

Rememberthatneithergarbagecollectionnorfinalizationisguaranteed.IftheJVMisn'tclosetorunningoutofmemory,thenitmightnotwastetimerecoveringmemorythroughgarbagecollection.

|_Howagarbagecollectorworks

首先,JVM有多種實現形式,不同類型的JVM實現上會有所差別,速度、穩定性也不一樣,因此應該辯證的看待下面的文字-:)

在一些JVM中,Java的堆與C++中的堆很是不同。C++中的堆就像一個大院子,每個對象占據一塊地方。而Java中的堆則更像是一個傳送帶,因而加快了為對象分配內存的速度,就如同C++中的棧幀移動一般,隨著"heappointer"的移動其分配內存的速度稍遜與棧(forJavaheap,there'salittleextraoverhead forbookkeeping,butit'snothinglikesearchingforstorage)。

一個簡單且緩慢的垃圾回收方案是采用referencecounting。每個對象包含一個引用計數器,GC遍歷整個對象列表,當它發現一個引用計數器為零時,釋放該對象的內存。管理計數器引用在程序的整個生命周期中有小的常量的開銷。缺點是彼此循環引用的對象雖為垃圾但是因其引用計數器非零,因此得不到釋放。該方案通常被用來解釋一種可能的垃圾回收機制,但是似乎從沒有被任何JVM的具體實現采用過。

一個更快的方案是基于一種思想:non-dead對象必須最終能夠被生存在棧上或是靜態存儲區上的引用所追蹤到。這個鏈條可能穿越基層對象,從棧上和靜態存儲區上的所有引用開始,跟蹤進引用指向的對象,然后跟蹤對象里的所有引用,如此反復,可以找到所有生存的對象。值得注意的是,彼此循環引用對象的釋放不在是問題了,它們不能被找到,自動成為了垃圾。

JVM采用適合的垃圾回收方案,可以根據不同的情況進行切換。兩種主要的機制是"stop-and-copy"、"mark-and-sweep"。stop-and-copy方案暫停當前的程序,留下所有垃圾,只將生存的對象從一個堆拷貝到另一個堆中。mark-and-sweep方案一直被早期的Sun'sJVM采用,一般而言,它速度很慢,但是當垃圾很少甚至是沒有垃圾產生的時候,其速度是很快的。mark-and-copy方案同樣遵循從棧上或是靜態存儲區上的引用追蹤對象的邏輯,每次它發現一個對象,對象就被設置一個標記,當mark程序執行完成后,sweep才能得到執行。sweep執行期間,死亡對象被釋放。由于沒有copy發生,如果收集器決定壓緊碎片堆,只能通過移動對象的方式。

JVM監視GC的效率。如果所有對象長期生存,它切換到mark-and-sweep模式下工作。同樣地,如果堆上的碎片變多,它切換回stop-and-copy模式。

JVM中還有很多額外的提速方法,比如just-in-time(JIT)compiler、HotSpot技術等。一部漫長的進化史啊:-)

ConstructorInitialization

There'sonethingtokeepinmind,however:Youaren'tprecludingtheautomaticinitialization,whichhappensbeforetheconstructorisentered.

所有的原生數據類型、對象引用(不包括局部變量,如果其未被初始化就使用的話,出現編譯錯誤:variablemightnothavebeeninitialized)和那些在定義處清晰初始化的變量都被預先初始化為零。

|_Orderofinitialization

在類內部,變量初始化的順序取決于它在類中定義的順序。變量的定義可能分散地貫穿在方法的定義之間,但是變量在構造函數執行前被初始化。

|_staticdatainitialization

靜態變量的初始化發生在類對象被創建的時候或者第一次靜態訪問發生的時候。

Tosummarizetheprocessofcreatinganobject,consideraclasscalledDog:

1、Eventhoughitdoesn'texplicitlyusethestatickeyword,theconstructorisactuallyastaticmethod.SothefirsttimeanobjectoftypeDogiscreated,orthefirsttimeastaticmethodorstaticfieldofclassDogisaccessed,theJavainterpretermustlocateDog.class,whichitdosebysearchingthroughtheclasspath.

2、AsDog.classisloaded(creatingaClassobject),allofitsstaticinitializersarerun.Thus,staticinitializationtakesplaceonlyonce,astheClassobjectisloadedforthefirsttime.

3、WhenyoucreateanewDog(),theconstructionprocessforaDogobjectfirstallocatesenoughstorageforaDogobjectontheheap.

4、Thisstorageiswipedtozero,automaticallysettingalltheprimitivesinthatDogobjecttotheirdefaultvalues(zerofornumberandtheequivalentforbooleanandchar)andthereferencestonull.

5、Anyinitializationsthatoccuratthepointoffielddefinitionareexecuted.

6、Constructorsareexecuted.Thismightactuallyinvolveafairamountofactivity,especiallywheninheritanceisinvolved.

|_Explicitstaticinitialization

Java中可以通過靜態代碼塊的方式初始化一組靜態變量。

語法形式:static{...}

它只會執行一次——thefirsttimeyoumakeanobjectofthatclassorthefirsttimeyouaccessastaticmemberofthatclass(evenifyounevermakeanobjectofthatclass).

|_Non-staticinstanceinitialization

Java提供一個簡單的語法{...},稱為實例初始化,用于初始化每個對象的非靜態的變量,在構造函數之前執行。

Arrayinitialization

Java通過拋出運行期異常的方式防止數組訪問越界,盡管這花費了一些時間,但是并沒有方式來關閉它。為了網絡安全和程序員的產出,Java設計者做出了他們認為值得的權衡。盡管你可能以你認為更高效的數組訪問方式來寫代碼,這也是浪費時間的,因為自動的編譯期和運行期優化將實現快速數組訪問。

|_Variableargumentlists

與數組作為參數不同,變參列表的參數個數可以是零。

(END_XPJIANG).


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲字幕在线观看| 日韩电影免费观看中文字幕| 9.1国产丝袜在线观看| 久久久久久91| 精品亚洲一区二区三区在线观看| 欧美成人精品在线视频| 亚洲精品免费一区二区三区| 成人精品久久一区二区三区| 亚洲男人天堂手机在线| 性欧美xxxx交| 久久成人18免费网站| 日韩高清a**址| 国产精品一二三视频| www.日韩不卡电影av| 美女精品久久久| 精品亚洲一区二区三区四区五区| 97碰碰碰免费色视频| 亚洲国产精品大全| 久热国产精品视频| 欧美综合在线观看| 日韩不卡在线观看| 亚洲一区美女视频在线观看免费| 不用播放器成人网| 国产免费一区二区三区香蕉精| 97成人精品视频在线观看| 久久久国产精彩视频美女艺术照福利| 日韩av中文字幕在线| 欧美在线xxx| 91视频免费在线| www.久久久久久.com| 国产精品免费小视频| 午夜精品久久久久久久99热| 久久久最新网址| 亚洲国产精品久久久久秋霞不卡| 日韩欧美在线一区| 国产一区二区免费| 国产精彩精品视频| 欧美贵妇videos办公室| 欧美日韩一区二区在线播放| 欧美日韩亚洲一区二区| 欧美黑人狂野猛交老妇| 国产成人午夜视频网址| 欧美日韩激情视频8区| 伦伦影院午夜日韩欧美限制| 亚洲国产91精品在线观看| 超碰日本道色综合久久综合| 91欧美精品午夜性色福利在线| 亚洲国产日韩欧美在线动漫| 久久亚洲国产精品成人av秋霞| 亚洲欧洲国产伦综合| 亚洲男人天堂久| 91视频国产高清| 日本电影亚洲天堂| 久久久亚洲影院你懂的| 久久99亚洲精品| 色婷婷av一区二区三区在线观看| 亚洲人成欧美中文字幕| 91午夜在线播放| 国产原创欧美精品| 亚洲国产精品嫩草影院久久| 91国产精品91| 欧美日韩免费观看中文| 91精品国产99| 国产精品视频午夜| 亚洲а∨天堂久久精品9966| 91影院在线免费观看视频| 亚洲日韩中文字幕在线播放| 热99久久精品| 久久久国产在线视频| 欧美午夜影院在线视频| 国产精品极品在线| 国产精品高清免费在线观看| 亚洲精品一区久久久久久| 一本大道久久加勒比香蕉| 91av免费观看91av精品在线| 国产综合在线看| 久久亚洲精品成人| 亚洲第一中文字幕| 最近2019中文字幕第三页视频| 亚洲天堂2020| 欧美乱大交xxxxx另类电影| 日韩美女写真福利在线观看| 亚洲在线免费视频| 久久露脸国产精品| 国产主播欧美精品| 亚洲最大福利视频网站| 91欧美视频网站| 日本高清不卡的在线| 日韩中文字幕第一页| 8090理伦午夜在线电影| 欧美成人sm免费视频| 清纯唯美亚洲综合| 精品视频一区在线视频| 91老司机精品视频| 久久久爽爽爽美女图片| 精品国产乱码久久久久久虫虫漫画| 九九热在线精品视频| 91av免费观看91av精品在线| 26uuu日韩精品一区二区| 国产区亚洲区欧美区| 亚洲第一精品久久忘忧草社区| 国产美女主播一区| 国产精品久久久久高潮| 中文欧美在线视频| 一级做a爰片久久毛片美女图片| 亚洲精品日韩激情在线电影| 992tv在线成人免费观看| 亚洲精品wwww| 在线观看欧美视频| 激情久久av一区av二区av三区| 日韩欧美一区二区在线| 91久久精品久久国产性色也91| 国产视频亚洲视频| 国产精品国产亚洲伊人久久| 国内伊人久久久久久网站视频| 国产91热爆ts人妖在线| 久久午夜a级毛片| 久久国产精品久久国产精品| 日韩中文字幕国产| 国产91精品视频在线观看| 成人性生交大片免费看视频直播| 成人国内精品久久久久一区| 成人国产亚洲精品a区天堂华泰| 粉嫩老牛aⅴ一区二区三区| 亚洲国产日韩欧美在线图片| 亚洲乱码国产乱码精品精| 国产精品极品美女在线观看免费| 亚洲精品视频免费在线观看| 欧美激情一区二区三级高清视频| 亚洲免费视频一区二区| 精品综合久久久久久97| 国产成人精品电影| 日韩av网站电影| 亚洲男人第一av网站| 亚洲精品www| 日韩在线播放av| 日韩精品免费在线播放| 成人性生交大片免费观看嘿嘿视频| 亚洲美女av电影| 久久亚洲精品网站| 久久久久久亚洲精品不卡| 在线精品91av| 国产欧美一区二区三区久久人妖| 中文字幕亚洲一区二区三区| 日韩一二三在线视频播| 色综合久久天天综线观看| 久久精品国产免费观看| 久久精品视频中文字幕| 久久免费在线观看| 97高清免费视频| 国产精品久久久久久久久久久不卡| 亚洲成av人影院在线观看| 成人h视频在线观看播放| 中文字幕免费精品一区| 国内外成人免费激情在线视频| 亚洲精品一区久久久久久| 国产精品国内视频| 国产成人极品视频| 黄色成人av在线| 欧美性高潮床叫视频| 精品人伦一区二区三区蜜桃免费| 少妇高潮久久77777| 国产精品日韩在线播放| 国产经典一区二区|