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