- 编程思想
面向过程
- 按步骤实现
- 适合简单任务,不需要过多协作的事务
面向对象
- 对象将过程封装,通过对象将事务实现
- 适合多对象协作的事务
总结
- 都是解决问题的思维方式,都是代码组织的方式
- 解决简单问题使用面向过程
- 解决复杂问题,宏观上使用面向对象把握,微观处理仍然是面向过程
- 对象
本质:内存中的内存块
数据管理的方式
事物的发展总是遵循"量变引起质变"的哲学原则
数据无管理时代
- 最初的计算机语言只有基本变量,变量之间相互独立
数组管理和企业部门制
- 将同类型数据放在一起统一管理
对象和企业项目制
- 以项目为单位,包含不同类型的部门,以对象为单位,包含不同类型的数据和方法
- 方便管理
- 类
对象的模板/抽象/归类
public class Student {
//属性
int id;
String name;
int age;
//构造方法
Student(){}
//普通方法
void study(){}
}
- 一个java文件可以写多个类,但是只有一个public修饰的类
- 面向对象的内存分析
java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区methodArea
栈stack
- 栈描述方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)
- jvm为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)
- 栈属于线程私有,不能实现线程间的共享
- 栈的存储特性是"先进后出,后进先出"
- 栈是由系统自动分配,速度快,栈是一个连续的内存空间
堆heap
- 堆用于存储创建好的对象和数组(数组也是对象)
- jvm只有一个堆,被所有线程共享
- 堆是一个不连续的内存空间,分配灵活,速度慢
方法区(静态区)
- jvm只有一个方法区,被所有线程共享
- 方法区实际也是堆,只是用于存储类、常量相关的信息
- 用来存放程序总永远不变或唯一的内容(类信息【Class对象】、静态变量、字符串常量等)
- 构造方法
用于对象的初始化
使用new关键字调用
如果自定义构造器,则编译器不会自动添加构造器
构造方法重载
- 垃圾回收机制 Garbage Collection
- 根据算法发现无用的对象
- 引用计数法
- 引用可达法(根搜索算法)
- 将无用的对象进行注销和内存释放
- 通用的分代垃圾回收机制
- 年轻代
- 年老代
- 持久代 用于存放静态文件,堆垃圾回收没有显著影响
- JVM调优和Fall GC
- 开发中容易造成内存泄漏的操作
- 创建大量无用对象
- 静态集合类的使用
- 各种连接对象(IO流对象、数据库连接对象、网络连接对象)未关闭
- 监听器的使用
- this关键字
创建一个对象
- 分配对象空间
- 执行属性值的显示初始化
- 执行构造方法
- 返回对象的地址给相关的变量
this是创建好的对象的地址,在类中表示当前类的对象
静态变量和静态方法不能通过this调用,只能通过类调用
- static关键字
类变量的生命周期与类相同
- 静态初始化块
在类加载的同时加载静态初始化块
- 参数传值机制
基本数据类型传值,实际传的是副本
引用数据类型传引用,实际传的是地址
- 包机制
java中管理类的重要手段
包名:域名倒着写,再加上模块名称
写项目必须加包,不允许使用默认包(在复杂系统开发过程中会异常)
导入包,import关键字,静态导入
导入包下所有的类,会降低编译速度,不会降低运行速度
- 面向对象的三大特征
封装 private
- 高内聚,低耦合
- 访问修饰符 private、default、protected、public
继承 extends 类单继承,接口多继承
- 方法重写 @Override
- 自动向上转型和强制向下转型
- instanceof关键字
多态
- 同一个方法调用,由于对象不同可能会有不同的行为
- object类
所有java类的根基类
toString() 默认输出该对象的内存地址,方法可重写
equals() 默认比较对象的内存地址,方法可重写
- super关键字
表示父类对象
继承树追溯
- final
final修饰的属性不能被继承,值不能被修改
final修饰的方法不能被重写
- 数组
相同类型数据的有序集合
每一个数据称作一个元素,每个元素可以通过一个索引(下标从0开始)来访问
数组的声明、赋值、取值、遍历