一、面向对象

1、 使用面向对象编程思想开发系统,在现代开发中会将面向对象贯穿整个过程,一般包括:
OOA/OOD/OOP:
① OOA:面向对象分析(Object-Oriented Analysis)
② OOD:面向对象设计(Object-Oriented Design)
③ OOP:面向对象编程(Object-Oriented Programming)

实现一个软件的过程:
分析(A) --> 设计(D) --> 编程§

2、 面向对象三大特征:
① 封装(Encapsulation)
② 继承(Inheritance)
③ 多态(Polymorphism)

任何一门面向对象的编程语言都具备以上三大特征,例如:python、C#、java 等

二、类和对象

1、 类是对象的抽象,对象是类的实例。
类是模板,对象是实际存在的个体。
类—【实例化】—> 对象
对象—【抽象】—> 类

类 = 属性 + 方法;
属性来源于:状态
方法来源于:动作

2、 类的定义
[修饰符列表] class 类名 {
// 类体 = 属性 + 方法 ;
// 属性在代码上以“变量”的形式存在(描述状态)
// 方法描述动作/行为
}

修饰符列表可以省略

属性以“成员变量”的形式存在,因为属性对应的是“数据”,
数据在程序中只能放在变量中。
这种成员变量又称为“实例变量”。

方法体中声明的变量——局部变量
方法体外声明的变量——成员变量 成员变量就是属性

三、对象的创建和使用

1、 类型 变量名 = new 类名()
Student s1 = new Student();
//第一个 Student是一个引用数据类型
//第二个 Student是类名
// new Student()是一个对象

new运算符的作用是在堆内存中开辟一块空间;
通过new运算符创建的对象(以及对象的实例变量/成员变量),都存储在堆内存中。

局部变量存储在栈内存中。

变量必须先声明,再赋值才能访问。

实例变量是对象级别的变量,不能通过类名来直接访问实例变量。
// Student.name; 报错

2、 局部变量必须赋值;
对于成员变量,没有手动赋值时,系统默认赋值。

类型                默认值

byte                  0
short                 0
int                   0
long                  0L
float                 0.0F
double                0.0
boolean               false
char                  \u0000
引用数据类型          null

3、 对象和引用的区别

对象是通过new实例化的,在堆内存中存储;
Student s1 = new Student();
引用是指在s1中保存了堆内存中对象的内存地址,
Student是引用数据类型,s1是变量名。

访问实例变量
引用.实例变量名
System.out.println(s1.name);
System.out.println(s1.age);

在java语言中,垃圾回收器GC主要针对的是堆内存;
当一个java对象没有任何引用指向该对象时,GC会考虑将该垃圾数据释放回收掉。

空指针异常java.lang.NullPointerException
当一个“空的引用”去访问“对象相关/实例相关”数据时,一定会发生空指针异常。

4、 方法调用时参数的传递问题

参数传递时,和类型无关,无论是基本数据类型还是引用数据类型,统一将内存中保存的“值”复制一份,传递下去。

内存地址也是值。