这部分内容极其重要
离开内存分配谈语法机制都是在扯淡


声明:禁止以任何形式的转载!!!

一、面象过程:比如C语言(内存四区)

1.堆与全局的区别:只要不手动释放在程序运行期间变量空间始终存在。
但是全局区的变量不能由程序员释放,而堆中的空间可以通过free()函数释放。
常量区中的对象不可变:比如
char *p="hello world";
p[0]='y';
显然程序通过下标的方法去将"hello world"中的h改为y,显然这是对内存分配的无知,p这个变量在栈中,而"hello world"是一个字面常量,在常量区中,常量区中的空间是只读,不可以通过程序写入数据的。p这个指针变量只不过是保存
"hello world"这个字符串在常量区的首地址。并没有在栈中开辟空间来存这个字符串。但是你可以:p[0]去读取'h'(可读)而:
char p[20]="hello world";
p[0]='y';
这是可以的,因为p[20]表示在栈中开辟了一个数据来存这个字符串,栈中的空间是可修改的。
  二、面象对象:的虚拟机

栈:在方法体中定义的变量都是在栈中,包括值类型与引用类型。在栈中的引类型,系统分配空间,这个可空间可以放任意合法的数据。而栈中的引用类型,它没有存放数据的空中,但是在栈中为引用类型分配一个保存对象的引用,这个栈中的引用只能放地址。

堆:所有通过new调用构造方法就会在堆中开辟空间,前面说过,在栈中开辟的空间用于保存指向堆中对象的地址,那么堆中的对象就是用于存放数据的空间,系统为对象中堆中开辟存放数据的空间,这个对象包括成员字段和指向成员函数的函数指针(这是站在C语言的角度来看,毕竟高级与语的底层是C/C++)

String s="hello world";//这个字符串同样在方法区的常量池中,常量池中的空间在程序运行期间是只读的,这就是为什么说字符串对象是不可变的。
String s=new String("hello world");//图上说过,通过new和构造就会在堆上开辟空间,用来存这个字符串,此时,这个字符串是可变的,因为堆区空间的可读可写的。在面象对象的语言中也有结构其语法和类相类,但是最本质的区别的类是引用类型,而结构是值类型,结构不会在堆中开辟空间来存放成员,而是在栈中开辟一段连续的空间来存放(这是站在C的角度来看,但是C#也好,Java也好,底层,都是用C/C++写的)

转载于:https://www.cnblogs.com/chaeyeon/p/6144434.html

面象对象与面象过程内存分区相关推荐

  1. 细谈 对象的初始化过程------内存中的实现过程?

    今天对于内存的理解 又加深了一步: 对下面代码的理解: [html] view plaincopyprint? class Person { private String name="xia ...

  2. 面象对象设计6大原则之三:里氏替换原则

    转载自 面象对象设计6大原则之三:里氏替换原则 里氏替换原则(LSP),The Liskov Substitution Principle 定义 所有引用基类的地方必须能透明地引用其子类的对象,即子类 ...

  3. 对面象对象概念的理解、解释

    写在前面的话: 由于工作原因已经半年多没好好理下Java了,现在因换工作需要重新复习一下Java.以前一直想把自己在Java方面的学习心得写出来,现在终于算是有些时间了,那么开始吧. 这一篇讲对象(O ...

  4. 一木.溪桥学Python-11:迭代器、生成器、面象对象class MyClass:、self 参数、 __init__() 方法、__str__() 方法

    一木.溪桥 在Logic Education跟Amy学Python 逻辑教育 :https://logicedu.ke.qq.com 12期:Python基础课 一木.溪桥学Python-11:迭代器 ...

  5. 【推荐】JS面象对象编程视频教程

    一.JS面象对象编程(上) 二.JS面象对象编程(中) 三.JS面象对象编程(下) 转载于:https://www.cnblogs.com/artwl/archive/2011/07/24/21155 ...

  6. 从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的?

    转载自   从Java类到对象的创建过程都做了些啥?内存中的对象是啥样的? 先回顾一下Java程序执行的过程: Java程序执行时,第一步系统创建虚拟机进程,然后虚拟器用类加载器Class Loade ...

  7. 面象对象设计6大原则之六:迪米特原则

    转载自 面象对象设计6大原则之六:迪米特原则 迪米特原则(LOD),The Law Of Demeter,也称为最少知识原则 定义 一个对象应该对其他对象有最少的了解. 也就是说一个类耦合和调用一个类 ...

  8. 面象对象设计6大原则之五:依赖倒置原则

    转载自 面象对象设计6大原则之五:依赖倒置原则 依赖倒置原则(DIP),The Dependency Inversion Principle 定义 1.高层模块不应该依赖低层模块,两都应该依赖于抽象. ...

  9. 面象对象设计6大原则之四:接口隔离原则

    转载自 面象对象设计6大原则之四:接口隔离原则 接口隔离原则(ISP),The Interface Segregation Principle 定义 客户端不需要强迫依赖那些它们不需要的接口. 类与接 ...

  10. 面象对象设计6大原则之二:开放封闭原则

    转载自 面象对象设计6大原则之二:开放封闭原则 开放封闭原则(OCP),The Open Closed Principle 定义 一个软件的实体,包括类.方法.模块.应该对扩展开放,对修改关闭. 也就 ...

最新文章

  1. 内存缓存LruCache的简单使用
  2. 聊聊WEB系列_Index
  3. C Primer Plus 第6章 C控制语句:循环 6.9 选择哪种循环
  4. Exchange2010配置-设置OWA身份验证及重定向
  5. android 手机关机代码非root,怎么用代码判断android手机是否开启了ROOT 权限知道...
  6. 如何计算Java对象所占内存的大小
  7. linux内核参数的程序,技巧-Linux内核参数调整办法
  8. SSH整合方案二(不带hibernate.cfg.xml)
  9. python全栈索引
  10. 李宏毅机器学习——迁移学习
  11. 这14个Java核心并发容器,Java高手和低手的区别点
  12. 美团打车已攻到北京,滴滴还在忙着收小蓝单车?
  13. 判断网页是否是微信浏览器打开
  14. API 函数 MultiByteToWideChar 实现各类编码转换
  15. 基于Web的通用BBS系统的建立与维护
  16. 深入浅出MFC.pdf
  17. 基于SIFT特征提取的图像拼接算法matlab仿真
  18. 微信emoji表情及输入法自带表情存储与显示
  19. html banner广告代码,jquery实现的Banner广告收缩效果代码
  20. docker中mysql忘记密码怎么办?

热门文章

  1. 苹果python执行不了,Python调用的AppleScript不使用osascript或appscript?
  2. ruby分割字符串_Ruby中常用的字符串处理函数使用实例
  3. 自动驾驶1-5: 感知要求Requirements for Perception
  4. 容器技术Docker K8s 25 容器服务ACK基础与进阶-监控管理
  5. 算法:平衡二叉树110. Balanced Binary Tree
  6. 算法:投票Voting
  7. 易筋SpringBoot 2.1 | 第廿四篇:SpringBoot访问Docker中的MongoDB
  8. 最大似然参数估计的求解
  9. java中如何访问类中的字段_java – 在子类中使用super关键字访问超类私有字段
  10. eda多功能时钟设计_Altera FPGACPLD设计 基础篇+高级篇(附随书光盘)