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对象的调用方式也一样。

     

     

  • 相关阅读:
    Django 路由层
    HTTP协议
    Python并发编程之协程
    Django配置KindEditor
    Django Form
    pymysql模块
    javascript获取URL参数代码(网络摘抄)
    javascript 实现飘动的广告(网络收藏,转)
    游标的使用
    javascript 一个很好用的日历控件(网络收藏,转)
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12227823.html
Copyright © 2011-2022 走看看