类、对象、引用
- C 纯面向过程;C++ 半面向过程;Java 纯面向对象
- 面向过程:主要的关注点是实现的具体过程、因果关系【集成显卡的开发思路】
1. 优点:对于业务逻辑比较简单的程序,可以达到快速开发,前期投入成本较低
2. 缺点:很难解决非常复杂的业务逻辑;导致软件元素之间的耦合度非常高,只要其中一环出问题,整个系统会受到影响,导致最终的软件扩展性差;由于没有独立体的概念,所以无法达到组件复用。 - 面向对象:主要关注对象 [独立体] 能完成哪些功能【独立显卡的开发思路】
- 优点:耦合度低,扩展力强。更容易解决现实世界中复杂的业务逻辑。组件复用性强
- 缺点:前期投入成本较高,需要进行独立体的抽取,大量的系统分析与设计
- 面向对象的“6原则”(设计模式6大原则)
单一职责原则 | Single Responsibility Principle | SRP |
---|---|---|
接口隔离原则 | interface segregation principle | ISP |
里氏替换原则 | liskov substitution principle | LSP |
依赖倒置原则 | dependence inversion principle | DIP |
开放封闭原则 | open closed principle | OCP |
迪米特法则/最少知道原则 | Law Of Demeter | LOD |
合成复用原则 | Composite Reuse principle | CRP |
面向对象的三大特征
- 封装
- 继承
- 多态
2、 采用面向对象的方式开发一个软件,整个生命周期贯穿使用OO方式
OO:Object-Oriented
面向对象的分析(OOA)–> 面向对象的设计(OOD)–> 面向对象的编程(OOP)
3、 类和对象:
-
什么是类?
-
-
类在现实世界是不存在的,是一个模板,是人类大脑思考抽象的结果
-
类代表一类事物,对象 A 与对象 B 之间存在共同特征,进行抽象得出类
-
类描述的是对象的共同特征
-
类主要描述【状态】和【动作】
-
- 属性:描述对象的状态信息(通常采用变量的方式定义)
- 方法:描述对象的动作信息
-
类属于引用数据类型
-
-
什么是对象?
-
- 对象是实际的个体,现实世界中实际存在
- 对象又称为实例/instance
- 实例变量又称为对象变量
-
类–【实例化】–>对象
-
对象–【抽象化】–>类
4、 类的定义:(这里的定义并不完整)
[修饰符列表] class 类名{
}
[注] 因为工具类的方法都是静态的,不需要new对象,直接采用类名调用。也就是不需要调用工具类的构造方法,所以将构造方法设置成私有,即使想new对象也new不了。这是一种习惯不是规定。
5、 类体内、方法体外定义的变量是【成员变量】,成员变量若没有赋值,系统自动赋值,向0看齐
6、 引用数据类型:
String(string.class) | SUN提供的 |
---|---|
Student(Student.class) | 程序猿自定义的 |
【注】:Java中所有的 .class 都属于引用数据类型
7、 实例化对象的语法:new 类名()
new 是java语言当中的运算符,其作用是创建对象,在 JVM 堆内存中开辟新的内存空间
方法区内存 | 在类加载时 .class 字节码文件代码被加载到该内存空间,存储代码片段、静态变量 方法区内存只有一个 |
---|---|
栈内存 | 存储(方法中的)局部变量,方法代码片段执行时,给该方法分配内存,在栈中压栈 堆内存只有一个 |
堆内存 | new 的对象在堆内存中存储 栈内存一个线程一个 |
8、 成员变量默认值:
数据类型 | 默认值 |
---|---|
byte、short、int、long | 0,0,0,0L |
float、double | 0.0F,0.0 |
boolean | false |
char | \u0000 |
引用数据类型 | null(空值) |
10、
对象 | new 运算符在堆内存中开辟的内存空间称为对象 |
---|---|
引用 | 引用是一个变量,只不过这个变量保存了一个 java 对象的内存地址 |
11、java 语言中,程序猿不能直接操作堆内存,因为 java 没有指针。只能通过“引用”访问
堆内存中的对象内部的实例变量
12、变量分类:
-
局部变量【方法体内声明】
-
成员变量【方法体外声明】
实例变量:前面修饰符没有static
静态变量/类变量:前面修饰符有static,存储在【方法区内存】中。
13、
局部变量 | 在栈中存储 |
---|---|
成员变量中的实例变量 | 在堆内存的 java 对象中存储 |
成员变量中的静态变量 | 在方法区内存中存储 |
14、
-
三块内存中变化最频繁的是【栈内存】
-
最先有数据的是【方法区内存】
-
垃圾回收器主要针对【堆内存】
15、垃圾回收器(自动垃圾回收机制,GC机制)什么时候考虑将某个java对象的内存回收呢?
没有更多的引用指向某个堆内存中的java对象时,该对象称为垃圾数据,会被垃圾回收器回收
以下程序编译可以通过,因为符合语法,但运行报 NullPointerException
public class OOTest04{
public static void main(String[] args){
Customer c = new Customer();
System.out.println(c.id);
c = null;
System.out.println(c.id);
}
}