一、面向对象
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、 方法调用时参数的传递问题
参数传递时,和类型无关,无论是基本数据类型还是引用数据类型,统一将内存中保存的“值”复制一份,传递下去。
内存地址也是值。