//内存分为堆内存和栈内存,Test test=new Test()在内存中显示,前部分在栈内存中分配一个地址new Test()在堆内存分配分配相当于地址房间编号
package study1; public class test { public static void main(String args[]){ test test1=new test(); int date=9; Birthday B1=new Birthday(7,7,1970); Birthday B2=new Birthday(7,7,1990); test1.change1(date); test1.change2(B1); test1.change3(B2); System.out.println("date:"+date); B1.display(); B2.display(); } public void change1(int i){ i=1234;//在这里不会修改date值,date值copy给i } //方法一旦执行后,分配对象内存会消失 public void change2(Birthday b){ //b 与B1相同地址 b=new Birthday(1,1,2010);//b 指向新的对象不会是原来B1的地址,分配一个新的地址,同样不会修改B1 //无法修改B1中值 } public void change3(Birthday b){ b.setDay(22); } } class Birthday(){ private int day; private int month; private int year; public void setDay(int day) { this.day = day; } public void setMonth(int month) { this.month = month; } public void setYear(int year) { this.year = year; } public Birthday(int d,int m,int y){ day=d;month=m;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+"——"); } }
5. 注意在此过程中多态中内存分析
动态绑定:调用方法重写,看实际过程中new出来的对象判断其调用其(new对象)方法
7.继承中的内存分析
分析:Aninam obj2=new Dog()输出为什么会先有父类构造方法,在输出子类基本构造方法:原因在下面第一条定理中:输出:输出Animal类调用 输出dog类调用