九天學會Java,第七天,程序運行結構

  • 變量和數據類型,賦值和輸出
  • 算術運算
  • 選擇結構
  • 循環結構
  • 函數定義,函數調用
  • 變量做用域
  • 棧,程序運行的基石 <---
  • 面向對象
  • 異常處理
  • 語言提供的公用包

如今高級語言之因此能調用函數,能在不一樣的類實例切換來切換去,是得利於stack(棧)這個數據結構。棧是一種先進後出的數據結構,用圖表示可參考以下:數據結構

image

5入棧以後,棧中只有一個元素5。6再入棧後,有5和6,其中5在棧底,6在棧頂。函數

接着,6出棧後,棧裏只有5。5再出棧後,棧爲空。code

可能你會好奇,這跟函數,面向對象有什麼關係,彆着急。對象

後面我用一個示例演示函數,對象實例是怎麼像積木同樣堆起來,又一個個卸下去。作用域

注意跟着(1)(2)。。的順序來看註釋class

/**
 * 本示例演示stack是如何工做的
 */
public class StackTalk {
    public static void level1() {
        /** (2)
         * 調用level1時,level1的context壓入棧內
         * 此時棧裏有level1 context,棧底是main 的context
         */
        int level1Val = 1;
        level2();
        /** (6)
         * 調用完level2以後,level2的context出棧
         * 此時棧裏有level1和main context
         */
        System.out.println("level:" + level1Val);
    }

    public static void level2() {
        /**
         * (3) 調用level2時,level2的context壓入棧內
         * 此時棧裏有level2, level1和main context
         */
        int level2Val = 2;
        level3();
        /** (5)
         * 調用完level3以後,level3的context出棧
         * 此時棧裏有level2, level1和main context
         */
        System.out.println("level:" + level2Val);
    }

    public static void level3() {
        /**
         * (4) 調用level3時,level3的context壓入棧內
         * 此時棧裏有level3, level2, level1和main context
         */
        int level3Val = 3;
        System.out.println("level:" + level3Val);
    }

    public static void main(String[] args) {
        int mainLevel = 0;
        /** (1)
         * 在調用level1以前,main函數的context壓入棧內
         * 此時棧裏有mainLevel
         * 接着調用level1
         */
        level1();
        /** (7)
         * 調用完level1以後,level1的context出棧
         * 此時棧裏有main context
         */
        System.out.println("level:" + mainLevel);
    }
    /**
     * (8) 
     * 程序結束後,main context出棧,棧爲空
     */
}

image

程序從main開始運行,此時main context壓入棧中變量

image

調用level1,level1 context壓棧,此時棧底是main context,棧頂是leve1 context循環

image

調用level2,level2 context壓棧,此時棧頂是level2 context數據類型

image

調用level3,level3 context壓棧,此時棧頂是level3 context程序

當函數level3運行結束後,level3會退出棧,此時棧的狀態是

image

其他同理。有了棧,咱們就實現了函數層層調用。因此說棧是現代程序運行的基石。

理解這個簡單實用的數據結構,對你理解程序運行機制,變量做用域都很用幫助。

相關文章
相關標籤/搜索