zoukankan      html  css  js  c++  java
  • 面向对象-对象的内存图

             面向对象-对象的内存图

                                 作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

     

     

     

    一.测试代码

    /**
     * 
     * @author 尹正杰
     *
     */
    public class Car {
        
        //用于保存车身颜色数据
        String color;
        
        //用于保存轮胎数的数据
        int tyreNumber;
        
        //給汽车类(Car)创建一个跑(run)的方法
        public void run() {
            System.out.println("车身颜色: " + color + ", 轮胎数量: " + tyreNumber );
        }
        
    }
    Car.java文件内容
    /**
     * 
     * @author 尹正杰
     *
     */
    public class CarDemo {
        
        public static void main(String[] args) {
            Car c1 = new Car();
            Car c2 = new Car();
            
            c1.color = "红色";
            c1.tyreNumber = 5;
            c1.run();
            
            c2.color = "蓝色";
            c2.tyreNumber = 4;
            c2.run();
            
            System.out.println(c1);
            System.out.println(c2);
        }
        
    }

    二.分析代码在JVM内存中的存储方式

      如下图所示,我们这里暂时不分析JVM类的加载过程以及方法区等功能,主要分析堆内存和栈内存的关系。

      当JVM执行"new Car()"时会调用"Car"这个类的构造方法(如果该类没有定义构造方法就去找它的父类),在堆内存中创建一个对象,最终将堆内存中该对象的内存地址返回给栈内存的变量进行保存。调用构造方法其实就是为类中的成员变量进行初始化赋值,比如字符串(String)的默认值是"null",整数(int)的默认值是0。

      之后调用c1.color = "红色",其实就是将c1指向的堆内存对象中的成员变量中的"color"由默认值"null"替换成"红色",同理,调用c1.tyreNumber = 5,其实就是将tyreNumber的默认值由0替换成5。

      综上所述,c2对象的调用方式也一样。

     

     

  • 相关阅读:
    浅议APC
    fastIO
    设备对象 驱动对象
    PostMessage和SendMessage的区别
    使用DLL在进程间共享数据
    32位程序读写64位程序内存
    windows文件映射
    windows消息传送(自定义消息和WM_COPYDATA)
    windows剪贴板
    mysql innobackupex备份工具
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12227823.html
Copyright © 2011-2022 走看看