内存解析
example
class BirthDate{
private int day;
private int month;
private int year;
public Birthdate(int d, int m, int y) {//构造方法,加不加public有什么区别
day = d;
month = m;
year = y;
}
public void setDay(int d) {//普通方法
day = d;
}
public void setMonth(int m) {
month = m;
}
public void setYear(int y) {
year = y;
}
public int getDay() {//普通方法
return day;
}
public int getMonth() {
return month;
}
public int getYear() {
return year;
}
public void display(){
System.out.println(day + "-" + month + "-" + year;)
}
}
public class Test{
public static void main (String args[]) {
Test test = new Test();//局部变量(方法中定义)test,同时在堆内存中会产生一个test对象
int date = 9;//局部变量,放在栈内存中
BirthDate d1= new BirthDate(7,7,1970); //局部变量
BirthDate d2= new BirthDate(1,1,2000); //局部变量
test.change1(date);//调用change1
test.change2(d1);
test.change3(d2);
System.out.println("date" + date);
d1.display();
d2.display();
}
public void chang1(int i){//形参i,与局部变量等同,在栈内存中产生一个i,并把date的值传递给i
i = 1234;
}//cahnge1完成后,所有局部变量消失,i消失,date依然为9
public void change2(BirthDate b ) {//传递一个birthdate的引用类型(d1,d2)d1,因为d1指向存在于
//堆内存中的(7,7,1997),故b也指向(7,7,1997)
b = new BirthDate(22,2,2004);//创建新的指向对象(22,2,2004)
}//栈内存中的b变量在方法结束后立即消失,堆内存中新创建的对象之后也会消失
public void change3(BirthDate b) {//创建变量b,将d2的值赋给b,b就指向d2指向的对象(1,1,2000),
b.setDay(22);//调用BirthDaate的方法s etDay——创建局部变量d, 将22传给d,d再传给day,由(1,1,2000)变为(22,1,2000 )
}
}