程序設計中的Stack詳解_第1頁
程序設計中的Stack詳解_第2頁
程序設計中的Stack詳解_第3頁
程序設計中的Stack詳解_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Stack的三種含義作者:阮一峰學習編程的時候,經常會看到stack這個詞,它的中文名字叫做棧.理解這個概念,對于理解程序的運行至關重要容易混淆的是,這個詞其實有 三種 含義,適用于不同的場合,必須加以區分.含義一:數據結構stack的第一種含義是一組數據的存放方式,特點為LIFO,即后進先出(Last in, first out)在這種數據結構中,數據像積木那樣一層層堆起來,后面加入的數據就放在最上 層使用的時候,最上層的數據第一個被用掉,這就叫做后進先岀.與這種結構配套的,是一些特定的方法,主要為下面這些.push:在最頂層加入數據.:返回并移除最頂層的數據pop?.:返回最頂層數據的值,

2、但不移除它top?.:返回一個布爾值,表示當前stack是否為空棧isempty ?含義二:代碼運行方式 stack的第二種含義是調用棧(call stack),表示函數或子例程像堆.積木一樣存放,以實現層層調用.下面以一段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);上面這段代碼運行的時候,首先調用main方法,里面需要生成一個Student的實 例,于是乂調用Student構造函數在構造函數中,乂調用到setName方法.program startStudent s;s = new Student(23!1 John11);這三次調用像積木一樣堆起來,就叫做調用棧程序運行的時候,總是先完成 最上 層的調用,然后將它的值返回到下一層調用,直至完成整個調用棧,返回最后的結 果.含義三:內存區域stack的第三種含義是存放數據的一種內存區域程

4、序運行的時候,需要內存空間 存放數據一般來說,系統會劃分出兩種不同的內存空間:一種叫做stack(棧),另一種叫做heap (堆)它們的主要區別是:stack是有結構的,每個區塊按照一定次序存放,可以明確知 道每個區塊的大小;heap是沒有結構的,數據可以任意存放因此,stack的尋址速度要快于heap.其他的區別還有,一般來說,每個線程分配一個stack,每個進程分配一個heap,也 就是說,stack是線程獨占的,heap是線程共用 的此外,stack創建的時候,大小 是確定的,數據超過這個大小,就發生stack overflow錯誤,而heap的大 小是不確 定的,需要的話可以不斷增加.

5、根據上面這些區別,數據存放的規則是:只要是局部的、占用空間確定的數據, 一般都存放在stack里面,否則就放在he曲里面請看下面這段代碼(來源).public void Methodiint i=4;int y=2;classl clsl = new classl;);上面代碼的Methodl方法,共包含了三個變量:i, y和clsl.其中,i和y的值是整 數,內存占用空間是確定的,而且是局部變量,只用在Methodl區塊之內,不會用 于區塊之外clsl也是局部變量,但是類型為指針變量,指向一個對象的實例指針 變量占用的大小是確定的,但是對象實例以口前的信息無法確知所占用的內存空間 大小.這三個變量和一個對象實例在內存中的存放方式如下冋$bjecJ/Heapstack從上圖可以看到,i、y和clsl都存放在stack,因為它們占用內存空間都是 確定的, 而且本身也屬于局部變量但是,clsl指向的對象實例存放在heap,因為它的大小不確 定作為一條規則可以記住,所有的對象都存放在heap.接下來的問題是,當Methodl方法運行結束,會發生什么事?回答是整個stack被清空,i、y和clsl這三個變量消失,因為它們是局部變量,區 塊一旦運行結束,就沒必要再存在了而heap之中的那 個對象實例繼續 存

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論