栈中存储什么?
每个线程都有自己的栈,栈中的数据都是以栈帧(stacke frame)的格式存在。
在这个线程上正在执行的的每个方法都各自对应一个栈帧。
栈帧是一个内存区块,是一个数据集,维持着方法执行过程中的各种数据信息。
每个栈帧中存储着
- 局部变量表(Local Variables)
- 操作数栈(或表达式栈)
- 动态链接(Dynamic Linking)(或指向运行时常量池的方法引用)
- 方法返回地址(return Address)(或方法正常退出或异常退出的定义)
- 一些附加信息
局部变量表
package chapter1;
public class Test {
public static void main(String[] args) {
}
/*
*
* 变量的分类:
* 按照数据类型分:1.基本数据类型。2.引用数据类型
* 按照在类中声明的位置分:1.成员变量:在使用前,都经历过默认初始化赋值
* 类变量:linking的prepare阶段:给类变量默认赋值------》initial阶段:给类变量显式赋值即静态代码块赋值
* 实例变量:随着对象的创建,会在堆空间中分配实例变量,并进行默认赋值
* 2.局部变量:在使用时,必须进行显式赋值的!否则,编译不通过
* */
public void test1(){
int number;
System.out.println(number); //局部变量,错误信息:变量未显式赋值,也就是未初始化
}
}
例子展示:
package chapter1;
public class Test2 {
public static void main(String[] args) {
byte i=15;
int k=6;
int m=i+k;
}
}