1 /** 2 * 3 * 堆栈中放基本类型变量的值,放引用类型变量的地址 4 * 堆中放真正的对象(new出来的) 5 */ 6 public class Reference { 7 public static void main(String[] args) { 8 9 10 AAA aaa=new AAA(); 11 12 BBB bbb=new BBB(); 13 14 bbb.change1(aaa);//将对象变量aaa传入BBB类的方法change1中 15 System.out.println(aaa.name);//测试打印 16 bbb.change2(aaa);//将对象变量aaa传入BBB类的方法change2中 17 System.out.println(aaa.name);//测试打印 18 } 19 } 20 21 //创建一个类AAA,包含一个name属性 22 class AAA{ 23 24 String name;//定义一个变量name 25 26 27 public String getName() {//其他类调用此方法就可以得到属性name 28 return name; 29 } 30 31 public void setName(String name) {//其他类调用此方法就可以设置属性name 32 this.name = name; 33 } 34 } 35 36 37 //创建一个类BBB,BBB类中有一些可以改变属性name得方法 38 class BBB{ 39 40 void change1(AAA 传入的对象变量){//改变这个name属性的第一种方法(属性name被protect修饰时,即默认修饰(就是啥也没写)) 41 //这里 传入的对象变量:就是aaa 42 43 传入的对象变量.name="随便改";//设置name的值为:随便改 44 //name此时在堆中的值为:随便改 45 } 46 47 void change2(AAA 传入的对象变量){//改变这个name属性的第二种方法(属性name被private修饰时) 48 49 String a;//当程序运行到此句时,定义一个用于接收修改后地址得变量a(存放在堆栈中,无指向,值为null) 50 51 a="还是随便改";//当程序运行到此句时,变量a获得一个指向,现在a指向存放于堆中的AAA类的对象中的属性name 52 53 传入的对象变量.setName(a);//通过对象变量aaa调用对象的getname方法,将属性name的值改为:还是随便改 54 55 } 56 }