下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Stack的三種含義作者:阮一峰學(xué)習(xí)編程的時(shí)候,經(jīng)常會(huì)看到stack這個(gè)詞,它的中文名字叫做棧.理解這個(gè)概念,對(duì)于理解程序的運(yùn)行至關(guān)重要容易混淆的是,這個(gè)詞其實(shí)有 三種 含義,適用于不同的場(chǎng)合,必須加以區(qū)分.含義一:數(shù)據(jù)結(jié)構(gòu)stack的第一種含義是一組數(shù)據(jù)的存放方式,特點(diǎn)為L(zhǎng)IFO,即后進(jìn)先出(Last in, first out)在這種數(shù)據(jù)結(jié)構(gòu)中,數(shù)據(jù)像積木那樣一層層堆起來,后面加入的數(shù)據(jù)就放在最上 層使用的時(shí)候,最上層的數(shù)據(jù)第一個(gè)被用掉,這就叫做后進(jìn)先岀.與這種結(jié)構(gòu)配套的,是一些特定的方法,主要為下面這些.push:在最頂層加入數(shù)據(jù).:返回并移除最頂層的數(shù)據(jù)pop?.:返回最頂層數(shù)據(jù)的值,
2、但不移除它top?.:返回一個(gè)布爾值,表示當(dāng)前stack是否為空棧isempty ?含義二:代碼運(yùn)行方式 stack的第二種含義是調(diào)用棧(call stack),表示函數(shù)或子例程像堆.積木一樣存放,以實(shí)現(xiàn)層層調(diào)用.下面以一段JdVd代碼為例(來源).class Studentint age:String name;public Student int Aga String Name this.age = Age;setName Namepublic void setName String Namethis, name = Name;public class Mainpublic static
3、void main; StringargsStudent s;s = new Student 23, nlonh11);上面這段代碼運(yùn)行的時(shí)候,首先調(diào)用main方法,里面需要生成一個(gè)Student的實(shí) 例,于是乂調(diào)用Student構(gòu)造函數(shù)在構(gòu)造函數(shù)中,乂調(diào)用到setName方法.program startStudent s;s = new Student(23!1 John11);這三次調(diào)用像積木一樣堆起來,就叫做調(diào)用棧程序運(yùn)行的時(shí)候,總是先完成 最上 層的調(diào)用,然后將它的值返回到下一層調(diào)用,直至完成整個(gè)調(diào)用棧,返回最后的結(jié) 果.含義三:內(nèi)存區(qū)域stack的第三種含義是存放數(shù)據(jù)的一種內(nèi)存區(qū)域程
4、序運(yùn)行的時(shí)候,需要內(nèi)存空間 存放數(shù)據(jù)一般來說,系統(tǒng)會(huì)劃分出兩種不同的內(nèi)存空間:一種叫做stack(棧),另一種叫做heap (堆)它們的主要區(qū)別是:stack是有結(jié)構(gòu)的,每個(gè)區(qū)塊按照一定次序存放,可以明確知 道每個(gè)區(qū)塊的大?。籬eap是沒有結(jié)構(gòu)的,數(shù)據(jù)可以任意存放因此,stack的尋址速度要快于heap.其他的區(qū)別還有,一般來說,每個(gè)線程分配一個(gè)stack,每個(gè)進(jìn)程分配一個(gè)heap,也 就是說,stack是線程獨(dú)占的,heap是線程共用 的此外,stack創(chuàng)建的時(shí)候,大小 是確定的,數(shù)據(jù)超過這個(gè)大小,就發(fā)生stack overflow錯(cuò)誤,而heap的大 小是不確 定的,需要的話可以不斷增加.
5、根據(jù)上面這些區(qū)別,數(shù)據(jù)存放的規(guī)則是:只要是局部的、占用空間確定的數(shù)據(jù), 一般都存放在stack里面,否則就放在he曲里面請(qǐng)看下面這段代碼(來源).public void Methodiint i=4;int y=2;classl clsl = new classl;);上面代碼的Methodl方法,共包含了三個(gè)變量:i, y和clsl.其中,i和y的值是整 數(shù),內(nèi)存占用空間是確定的,而且是局部變量,只用在Methodl區(qū)塊之內(nèi),不會(huì)用 于區(qū)塊之外clsl也是局部變量,但是類型為指針變量,指向一個(gè)對(duì)象的實(shí)例指針 變量占用的大小是確定的,但是對(duì)象實(shí)例以口前的信息無法確知所占用的內(nèi)存空間 大小.這三個(gè)變量和一個(gè)對(duì)象實(shí)例在內(nèi)存中的存放方式如下冋$bjecJ/Heapstack從上圖可以看到,i、y和clsl都存放在stack,因?yàn)樗鼈冋加脙?nèi)存空間都是 確定的, 而且本身也屬于局部變量但是,clsl指向的對(duì)象實(shí)例存放在heap,因?yàn)樗拇笮〔淮_ 定作為一條規(guī)則可以記住,所有的對(duì)象都存放在heap.接下來的問題是,當(dāng)Methodl方法運(yùn)行結(jié)束,會(huì)發(fā)生什么事?回答是整個(gè)stack被清空,i、y和clsl這三個(gè)變量消失,因?yàn)樗鼈兪蔷植孔兞?,區(qū) 塊一旦運(yùn)行結(jié)束,就沒必要再存在了而heap之中的那 個(gè)對(duì)象實(shí)例繼續(xù) 存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年版智能門禁系統(tǒng)與訪客預(yù)約系統(tǒng)融合合同4篇
- 2025年度園林景觀工程苗木供應(yīng)合同范本4篇
- 二零二五年度自動(dòng)駕駛車輛測(cè)試場(chǎng)建設(shè)合同4篇
- 智能傳感器網(wǎng)絡(luò)-第2篇-深度研究
- 二零二五年度打井工程地質(zhì)災(zāi)害防治協(xié)議3篇
- 2025年度酒吧吧臺(tái)承包及配套設(shè)備供應(yīng)合同3篇
- 農(nóng)村污水處理設(shè)施規(guī)劃-第1篇-深度研究
- 二零二五年度醫(yī)用電梯采購(gòu)與維護(hù)保養(yǎng)協(xié)議4篇
- 數(shù)字貨幣應(yīng)用前景-深度研究
- 智能代碼審查與自動(dòng)提交-深度研究
- 2024年人教版小學(xué)三年級(jí)信息技術(shù)(下冊(cè))期末試卷附答案
- TB 10012-2019 鐵路工程地質(zhì)勘察規(guī)范
- 新蘇教版三年級(jí)下冊(cè)科學(xué)全冊(cè)知識(shí)點(diǎn)(背誦用)
- 鄉(xiāng)鎮(zhèn)風(fēng)控維穩(wěn)應(yīng)急預(yù)案演練
- 腦梗死合并癲癇病人的護(hù)理查房
- 蘇教版四年級(jí)上冊(cè)脫式計(jì)算300題及答案
- 犯罪現(xiàn)場(chǎng)保護(hù)培訓(xùn)課件
- 扣款通知單 采購(gòu)部
- 電除顫操作流程圖
- 湖北教育出版社三年級(jí)下冊(cè)信息技術(shù)教案
- 設(shè)計(jì)基礎(chǔ)全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論