java程序每七天一组_九天学会Java,第七天,程序运行结构

变量和数据类型,赋值和输出

算术运算

选择结构

循环结构

函数定义,函数调用

变量作用域

栈,程序运行的基石

面向对象

异常处理

语言提供的公用包

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

stack.png

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出栈,栈为空

*/

}

main_context.png

程序从main开始运行,此时main context压入栈中

level1_context.png

调用level1,level1 context压栈,此时栈底是main context,栈顶是leve1 context

level2_context.png

调用level2,level2 context压栈,此时栈顶是level2 context

level3_context.png

调用level3,level3 context压栈,此时栈顶是level3 context

当函数level3运行结束后,level3会退出栈,此时栈的状态是

level2_context.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值