一 面向对象和面向过程
1.面向过程
面向过程思考问题——怎么按步骤实现,并将步骤对应成方法,一步一步的最终完成。
特点:适合简单的,不需要协作的事务
2.面向对象
面向对象思想更契合人的思维模式。思考的时“怎么设计这个事物”
总结:
- 都是解决问题的思维方式,都是代码组织的方式
- 解决简单问题使用面向过程
- 解决复杂问题时,宏观上使用面向对象把握,微观处理时面向过程
二 对象
含义:数据管理的方式,在内存中就是一个内存块。
对象的由来是:数据无管理时代——>数据有限管理——>对象
三 对象和类的概念
类是对象的模板,系统根据类的定义制作对象
类叫做class
对象叫做object,instance(实例)
某个类的对象 等同于 某个类的实例
1.类定义
属性——field,叫做成员变量
方法——用于定义该类或该类实例的行为特征和功能实现
通过构造方法来构造类的对象,程序员不写就是系统自己创建一个无参构造方法
2.内存分析
java虚拟机的内存可以分为三个区域:
栈stack 堆heap 方法区method area(堆)
(1)栈
特点:
- 栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储——局部变量,操作数,方法出口)
- JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数,局部变量等)
- 栈是线程私有的,不能实现线程间的共享
- 特性是“先进后出,后进先出”
- 栈是一个连续的内存空间,由系统自动分配
(2)堆
特点:
- 用于存储创建好的对象(属性和方法)和数组
- JVM只有一个堆,被所有线程共享
- 不连续的内存空间,分配灵活,速度慢
(3)方法区
也称为静态区,特点:
- JVM只有一个方法区,被所有线程共享
- 方法区也是堆,只用于存储类,常量相关信息
- 用来存放程序中永远不变或者是唯一的内容(例如:类信息(代码),静态变量,静态方法,字符串常量)
例如:
- 先在方法区存入类的相关信息(代码,静态变量,静态方法,字符串常量)
- 在栈中存入main方法的栈帧(初值为空)
- 在主程序中new一个对象时,会在堆中创建一个对象,包括对象的属性和方法,初值为空或者时0且建好的每一个对象都有一个地址
- 把对象的地址赋值给main方法中new的对象的变量,当作变量的值
- 对对象的赋值是改变堆中已经创建好的对象的值,如果赋值是常量字符串,则从方法区指向
- 若对象的赋值中,有类的对象的成员变量。则在栈中创建一个构造方法的栈帧且在main方法栈帧中写入对象的地址,其对象的方法以及属性地址在堆中
- 而构造器的栈帧用完后,系统会自动删掉。程序执行完后,所有的内存分配取消