请写出JAVA弹栈压栈的步骤, 栈的存储方式


一.栈的作用

1. 栈的存放
  • 局部变量
  • 堆中对象的引用(对象在堆内存中的地址)
  一个对象的大小无法估计,但是一个对象的引用只占4byte
  基本数据类型的变量没有什么存储区域的说法,内存中分为两类进行存储    
    • 全局变量存储在堆中
    • 局部变量存储在栈中    
 
 
2. 栈的属性
  • 栈的创建方式
    • 每条线程都有一个独立的栈,在线程创建时创建

  

二.栈的操作

 1. 栈的存取顺序是先进后出,后进先出,就像是手枪弹夹,后进去的先打出来;
 
 2. 代码模拟
public class SQ {
    //先规定栈的最大容量
    Object[] objs ;
    //获取当前栈容量
    int size;

    public SQ(int MaxLen){
        this.objs = new Object[MaxLen];
    }


    //进行压栈操作(就是在栈中存入内容)
    public void push(Object x){
        System.out.println("压栈操作,压入内容为"+( objs[size++] = x));  //先给当前指针位置赋值,然后指针变大

    }

    //弹栈操作
    public void popu() {
        System.out.println("弹出栈顶内容:"+objs[size-1]);//获取栈顶数据,然后弹出栈中,栈容量减少
        size--;
    }

    //获取栈内所有数据
    public void getAllStack() {
        System.out.println("栈顶到栈底所有数据为");
        for (int i = size-1; i >= 0; i--) {
            System.out.println(objs[i]+" ");
        }
    }

    public static void main(String[] args) {
        SQ s = new SQ(20);
        s.push(1);
        s.push(2);
        s.push(3);
        s.push(4);
        s.getAllStack();
        s.popu();
        s.popu();
        s.getAllStack();
    }
}
output:
压栈操作,压入内容为1
压栈操作,压入内容为2
压栈操作,压入内容为3
压栈操作,压入内容为4
栈顶到栈底所有数据为
4 
3 
2 
1 
弹出栈顶内容:4
弹出栈顶内容:3
栈顶到栈底所有数据为
2 
1 
 
 
 

三.栈和栈帧

1. 栈帧的作用和定位
  • java栈以帧为单位来保存线程的状态
  • jvm对java栈只进行两种操作
    • ----以为单位的压栈和弹栈
 
2.局部变量表
  局部变量,他是class文件里面的内容,加载后被传递到方法区,参见 Class类详解
    

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">






免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM