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 }