1.代码
public class Test
{
public static int a = 1;
public static final int b = 2;
int c = 3;
public void methoda()
{
int d = 4;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
2对象分析
代码中字段a,b分别表示为静态变量和常量存储在方法区中
代码中方法methoda()该方法的方法描述(包含在类信息中)存在方法区中
代码中的实例变量c(即类的属性字段)是存储到堆中的
代码中的局部变量的存储也是在类信息中但是在对象调用该方法时,方法中所使用的各种变量是存储在栈中的(本地方法即native方法中的各种变量是在本地方法栈中,普通方法中的各种变量是存储在虚拟机栈上);
注: 方法的使用往往对应着一个栈帧在栈上从入栈到出栈的过程。(所以在使用递归的时候很容易发生虚拟机栈内存溢出,因为方法在没有使用完成时是不会出栈的,递归过多则会导致栈帧创建过多导致溢出);
堆中存储的对象实例数据只会保存字段属性不会保存任何方法和方法的描述