一.棧的作用
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;">