Java 基础 16 对象的内存图
2018-01-29 本文已影响12人
小熊先生很不开心
1.1 一个对象的内存图
1.1.1案例代码
package com.itheima_03;
/*
* 手机类:
* 成员变量:品牌,价格,颜色...
* 成员方法:打电话,发短信...
*/
public class Phone {
//品牌
String brand;
//价格
int price;
//颜色
String color;
//打电话
public void call(String name) {
System.out.println("给"+name+"打电话");
}
//发短信
public void sendMessage(String name) {
System.out.println("给"+name+"发短信");
}
}
package com.itheima_03;
/*
* 手机测试类
*/
public class PhoneTest {
public static void main(String[] args) {
Phone p = new Phone();
System.out.println(p.brand+"---"+p.price+"---"+p.color);
p.brand = "锤子";
p.price = 2999;
p.color = "棕色";
System.out.println(p.brand+"---"+p.price+"---"+p.color);
p.call("林青霞");
p.sendMessage("林青霞");
}
}
1.1.2一个对象的内存图图解
Object-oriented.png1.2 两个对象的内存图(共用方法区)
1.2.1 案例代码
package com.itheima_03;
/*
* 手机类的测试类
*/
public class PhoneDemo2 {
public static void main(String[] args) {
Phone p = new Phone();
p.brand = "小米5s";
p.price = 1999;
p.color = "银色";
System.out.println(p.brand+"---"+p.price+"---"+p.color);
p.call("林青霞");
p.sendMessage();
Phone p2 = new Phone();
p2.brand = "IPhone7S";
p2.price = 7999;
p2.color = "土豪金";
System.out.println(p2.brand+"---"+p2.price+"---"+p2.color);
p2.call("张曼玉");
p2.sendMessage();
}
}
1.2.2两个对象的内存图(共用方法区)图解
Object-oriented02.png1.3两个对象的内存图(两个引用指向同一个堆内存)
package com.itheima_03;
/*
* 手机类的测试类
*/
public class PhoneDemo3 {
public static void main(String[] args) {
Phone p = new Phone();
p.brand = "OPPO";
p.price = 2999;
p.color = "白色";
System.out.println(p.brand+"---"+p.price+"---"+p.color);
Phone p2 = p;
p2.brand = "魅族";
p2.price = 1999;
p2.color = "蓝色";
System.out.println(p.brand+"---"+p.price+"---"+p.color);
System.out.println(p2.brand+"---"+p2.price+"---"+p2.color);
}
}
1.3.2两个对象的内存图(两个引用指向同一个堆内存)图解
Object-oriented03.png1.4成员变量和局部变量区别
1.4.1案例代码
package com.itheima;
/*
* 成员变量和局部变量的区别:
* A:在类中的位置不同
* 成员变量:在类中,方法外
* 局部变量:在方法中或者方法声明上(形式参数)
* B:在内存中的位置不同
* 成员变量:在堆内存
* 局部变量:在栈内存
* C:生命周期不同
* 成员变量:随着对象的创建而存在,随着对象的消失而消失
* 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
* D:初始化值不同
* 成员变量:有默认值
* 局部变量:没有默认值,必须先定义,赋值,最后使用
*/
public class VariableDemo {
int x;
public void show() {
int y = 10;
System.out.println(x);
System.out.println(y);
}
}