成员变量、局部变量、常量和静态变量在内存中的分配

代码如下:

public class Birthday {
	public static int constant = 1;//静态边量 类加载放在方法区内存中
	public final int constant_final = 1;//常量 类加载放在方法区内存中
	private int day;
	private int month;
	private int year;

	public Birthday(int d, int m, int y) {
		day = d;
		month = m;
		year = y;
	}

	// 省略get,set方法………
	
	public static void main(String args[]) {//main方法执行,虚拟机为其分配栈内存
		int date = 9;//date局部变量,8种基础类型,引用和值都存在栈中
		Birthday d1 = new Birthday(7, 7, 1970);//d1为对象引用,存在栈中,对象(new BirthDate())存在堆中,其中d,m,y为局部变量存储在栈中,
//且它们的类型为基础类型,因此它们的数据也存储在栈中。day,month,year为成员变量,它们存储在堆中 
//(new BirthDate()里面)。当BirthDate构造方法执行完之后,d,m,y将从栈中消失。
		d1.change(date);//date变量值不会变,date在栈中引用一直都没变
	}

	public void change(int i) {//change方法执行,虚拟机为其分配栈内存,把date的引用传给i变量,i局部变量,8种基础类型,引用存在栈中,此时没有值
		i = 1234;//此时i是重新分配1234的引用,已经不在和date的引用相同
	}
}

 

你可能感兴趣的:(java,内存分配,堆和栈)