面向对象的基础_01内存分析

一 面向对象和面向过程

1.面向过程

面向过程思考问题——怎么按步骤实现,并将步骤对应成方法,一步一步的最终完成。
特点:适合简单的,不需要协作的事务

2.面向对象

面向对象思想更契合人的思维模式。思考的时“怎么设计这个事物”
总结:

  1. 都是解决问题的思维方式,都是代码组织的方式
  2. 解决简单问题使用面向过程
  3. 解决复杂问题时,宏观上使用面向对象把握,微观处理时面向过程

二 对象

含义:数据管理的方式,在内存中就是一个内存块。
对象的由来是:数据无管理时代——>数据有限管理——>对象

三 对象和类的概念

类是对象的模板,系统根据类的定义制作对象
类叫做class
对象叫做object,instance(实例)
某个类的对象 等同于 某个类的实例

1.类定义

属性——field,叫做成员变量
方法——用于定义该类或该类实例的行为特征和功能实现
通过构造方法来构造类的对象,程序员不写就是系统自己创建一个无参构造方法

2.内存分析

java虚拟机的内存可以分为三个区域:
栈stack 堆heap 方法区method area(堆)

(1)栈

特点:

  1. 栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储——局部变量,操作数,方法出口)
  2. JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数,局部变量等)
  3. 栈是线程私有的,不能实现线程间的共享
  4. 特性是“先进后出,后进先出”
  5. 栈是一个连续的内存空间,由系统自动分配

(2)堆

特点:

  1. 用于存储创建好的对象(属性和方法)和数组
  2. JVM只有一个堆,被所有线程共享
  3. 不连续的内存空间,分配灵活,速度慢

(3)方法区

也称为静态区,特点:

  1. JVM只有一个方法区,被所有线程共享
  2. 方法区也是堆,只用于存储类,常量相关信息
  3. 用来存放程序中永远不变或者是唯一的内容(例如:类信息(代码),静态变量,静态方法,字符串常量)

例如:

  1. 先在方法区存入类的相关信息(代码,静态变量,静态方法,字符串常量)
  2. 在栈中存入main方法的栈帧(初值为空)
  3. 在主程序中new一个对象时,会在堆中创建一个对象,包括对象的属性和方法,初值为空或者时0且建好的每一个对象都有一个地址
  4. 把对象的地址赋值给main方法中new的对象的变量,当作变量的值
  5. 对对象的赋值是改变堆中已经创建好的对象的值,如果赋值是常量字符串,则从方法区指向
  6. 若对象的赋值中,有类的对象的成员变量。则在栈中创建一个构造方法的栈帧且在main方法栈帧中写入对象的地址,其对象的方法以及属性地址在堆中
  7. 而构造器的栈帧用完后,系统会自动删掉。程序执行完后,所有的内存分配取消
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值