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.png

1.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.png

1.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.png

1.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);
    }
}

上一篇下一篇

猜你喜欢

热点阅读