定义手机类:
定义测试类:
}
public class Phone {
String brand
;
int price
;
String color
;
public void call(String name
) {
System
.out
.println("给"+name
+"打电话");
}
public void sendMessage() {
System
.out
.println("群发短信");
} }
定义测试类:
public class Test02Phone {
public static void main(String
[] args
) {
Phone p
= new Phone();
System
.out
.println("品牌:"+p
.brand
);
System
.out
.println("价格:"+p
.price
);
System
.out
.println("颜色:"+p
.color
);
System
.out
.println("‐‐‐‐‐‐‐‐‐‐‐‐");
p
.brand
= "锤子";
p
.price
= 2999;
p
.color
= "棕色";
System
.out
.println("品牌:"+p
.brand
);
System
.out
.println("价格:"+p
.price
);
System
.out
.println("颜色:"+p
.color
);
System
.out
.println("‐‐‐‐‐‐‐‐‐‐‐‐");
p
.call("紫霞");
p
.sendMessage();
}
}
一个对象,调用一个方法内存图
通过上图,我们可以理解,在栈内存中运行的方法,遵循"先进后出,后进先出"的原则。变量p指向堆内存中 的空间,寻找方法信息,去执行该方法。 但是,这里依然有问题存在。创建多个对象时,如果每个对象内部都保存一份方法信息,这就非常浪费内存 了,因为所有对象的方法信息都是一样的。那么如何解决这个问题呢?请看如下图解。
两个对象,调用同一方法内存图
对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息 只保存一份,节约内存空间
一个引用,作为参数传递到方法中内存图
引用类型作为参数,传递的是地址值。