一、⾯向对象和⾯向过程的区别
1. 面向对象编程
1.1面向对象三大特征
封装性:
- 一块代码的封装—方法
- 方法和属性的封装—类
- 某些数据的封装—对象
继承性:
优点:扩展性高,重用性强
多态性:
1、方法的多态;方法的重载与重写
2、对象的多态:向上转型与向下转型
向上转型:父类型的对象引用子类型的对象
向下转型:子类型的对象引用父类型的对象,(强制转换)
1.2面向对象名词扩展
- OOA:⾯向对象分析
- OOP:⾯向对象编程
- OOD:⾯向对象设计
2. 类与对象的定义和使用
2.1 基本概念
类和对象的比较:
- 类 :共性的概念
- 对象 :具体的,可以使用的事物
先产生类,再产生对象,类是对象的蓝图
对象的初始化顺序:静态代码块、实例代码块、构造函数
类中的组成:
- 属性(变量,描述每个对象的具体特点)
- 方法(操作的⾏为)
2.3 对象内存分析
Java内存区域 (简单的分为):栈内存和堆内存
- 栈内存(虚拟机局部变量表):存放的是局部变量(包含编译期可知的各种基本数据类型、对象引用-即堆内存的地址,可以简单的理解为对象的名称),Java栈是与线程对应起来的,每当创建⼀个线程,JVM就会为这个线程创建⼀个对应的Java栈。
- 堆内存:保存的是真正的数据,即对象的属性信息。(对象的存放位置,GC发生处)
2.4引用传递分析
引⽤传递的本质:⼀块堆内存可以被多个栈内存所指向
3.封装和构造方法
3.1 private
实现封装
要访问私有属性,按照Java的设计原则必须提供以下两种⽅法:
- setter⽅法:主要⽤于进⾏属性内容的设置与修改
- getter⽅法:主要⽤于属性内容的取得
private 实现封装的最⼤特征在于:只允许本类访问,⽽不允许外部类访问。
3.2 类的设计原则
编写类时,类中的所有属性必须使⽤private封装。属性若要被外部访问,必须定义setter、getter方法。
3.3 构造方法
构造⽅法就是使⽤关键字 new
实例化新对象时来进行调用的操作方法。
对于构造⽅法的定义,也需要遵循以下原则:
1.⽅法名称必须与类名称相同
2.构造⽅法没有返回值类型声明
3.每⼀个类中⼀定⾄少存在⼀个构造⽅法(没有明确定义,则系统⾃动⽣成⼀个⽆参构造
)
4.this关键字
this关键字主要有以下三个⽅⾯:
- this调⽤本类属性
- this调⽤本类⽅法
- this表示当前对象
指代一个隐式的引用变量
this.属性——就是当前对象 指向未来要创建的对象。主方法new后的对象
this(有参传参);只能放类里第一行
5.static关键字(重要
)
5.1 static类属性
- 描述共享属性,只需在属性前添加static关键字即可
- static属性⼜称为类属性,保存在全局数据区的内存之中,所有对象都可以进⾏该数据区的访问.
结论:
访问static属性(类属性)应使⽤类名称.属性名;
所有的⾮static属性(实例变量)必须在对象实例化后使⽤,⽽static属性(类属性)不受对象实例化控制。
所有static 在类加载时就能被执行