zoukankan      html  css  js  c++  java
  • 九天学会Java,第七天,程序运行结构

    • 变量和数据类型,赋值和输出
    • 算术运算
    • 选择结构
    • 循环结构
    • 函数定义,函数调用
    • 变量作用域
    • 栈,程序运行的基石 <---
    • 面向对象
    • 异常处理
    • 语言提供的公用包

    现在高级语言之所以能调用函数,能在不同的类实例切换来切换去,是得利于stack(栈)这个数据结构。栈是一种先进后出的数据结构,用图表示可参考如下:

    image

    5入栈之后,栈中只有一个元素5。6再入栈后,有5和6,其中5在栈底,6在栈顶。

    接着,6出栈后,栈里只有5。5再出栈后,栈为空。

    可能你会好奇,这跟函数,面向对象有什么关系,别着急。

    后面我用一个示例演示函数,对象实例是怎么像积木一样堆起来,又一个个卸下去。

    注意跟着(1)(2)。。的顺序来看注释

    /**
     * 本示例演示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

    其余同理。有了栈,我们就实现了函数层层调用。所以说栈是现代程序运行的基石。

    理解这个简单实用的数据结构,对你理解程序运行机制,变量作用域都很用帮助。

  • 相关阅读:
    windows小乌龟和git使用
    badboy录制过程中出现当前页面的脚本发现错误
    jmeter返回结果出现乱码
    jmeter入门操作 = 录制
    jmeter入门操作 = 接口
    jmeter工具下载及工具功能操作介绍
    程序的机器级表示(一)
    信息的表示和处理之浮点数
    信息的表示和处理之整数运算
    信息的表示和处理之整数表示
  • 原文地址:https://www.cnblogs.com/eecs/p/8849297.html
Copyright © 2011-2022 走看看