Java面向对象
- 面向过程和面向对象的区别
1、面向过程:主要关注点是实现的具体过程,因果关系。
优点:对于业务逻辑比较简单的程序,可达到快速开发,前期投入成本较低。
缺点:采用面向过程的方式开发很难解决非常复杂的业务逻辑,另外面向过程的方式导致软件元素之间的“耦合度”非常高,只要其中一环出了问题,整个系统受到影响,导致最终的软件“扩展力”差。另外,由于没有独立的概念,所以无法达到组件复用。
2、面向对象:主要关注点是对象【独立体】能完成哪些功能。
优点:耦合度低,扩展力强。更容易解决现实世界中更复杂的业务逻辑。组件复用性强。
缺点:前期投入成本较高,需要进行独立体的抽取,大量的系统分析与设计。 - 面向对象的三大特征
封装
继承
多态
(所有面向对象的编程语言都有这三大特征)
从软件的开发生命周期来看,基于面向对象可以分为三个阶段:
OOA(面向对象的分析)
OOD(面向对象的设计)
OOP(面向对象的编程) - 类和对象的概念
对象:对象是实际存在的个体,对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
类:在现实世界中是不存在的,类是一个模板,它描述一类对象的行为(方法)和状态(属性)。类代表了一类事物。 - 类的定义
1、语法结构:
[修饰符列表] class 类名{
属性;
方法;
}
2、学生类:描述所有学生对象的共同特征
学生对象有哪些状态信息:
学号【int】
姓名【String】
性别【Boolean】
...
学生对象有哪些动作信息:
吃饭
睡觉
学习
玩
...
注:属性通常是采用一个变量的形式来完成定义的。
int age;
String name;
boolean sex;
... - Java语言中包括两种数据类型:
1、基本数据类型
byte
short
int
long
...
2、引用数据类型
举例:int age = 10;
String username = "zhangsan";
Student s = ???;
String.class SUN提供的
System.class SUN提供的
User.class 程序员自定义的
Student.class 程序员自定义的
Product.class 程序员自定义的
...
Java语言中所有的class都属于引用数据类型。
- 对象的创建和使用
int i = 10;
Student s = new Student();
1、int是基本数据类型,i是变量名,10是一个int类型的字面值
2、通过一个类可以实例化N个对象,实例化对象的语法:new 类名();
3、new是Java语言中的一个运算符,new运算符的作用是创建对象,在JVM堆内存中开辟新的内存空间。
4、方法区内存:在类加载的时候,class字节码代码片段被加载到该内存空间当中。
栈内存(局部变量):方法代码片段执行的时候,会给该方法分配内存空间,在栈内存中压栈。
堆内存:new的对象在堆内存中开辟的内存空间称为对象。
5、Student是一个引用数据类型,s是一个变量名,new Student()是一个学生对象,s是一个局部变量【在栈内存中储存】。
6、什么是对象?new运算符在堆内存中开辟的内存空间称为对象。
什么是引用?引用是一个变量,只不过这个变量(s)中保存了另一个Java对象的内存地址。
7、Java语言中,程序员不能直接操作堆内存,因为Java没有指针;只能通过“引用”去访问堆内存当中对象内部的实例变量。
8、访问实例变量的语法格式:
读取数据:引用.变量名(例:int stuAge=s.age)
修改数据:引用.变量名 = 值(例:s.age = 10) - JVM主要有三块内存空间:栈内存、堆内存、方法区内存
1、栈内存中储存局部变量;
堆内存中储存实例变量;
方法区内存中储存代码片段和静态变量。
2、变量分类:
局部变量【方法体中声明】
成员变量【方法体外声明】:实例变量(前面的修饰符没有static)和静态变量(前面的修饰符有static) - 垃圾回收器【垃圾回收机制、GC机制】
1、什么时候会考虑将某个Java对象的内存回收呢?
当堆内存当中的Java对象成为垃圾数据的时候,会被垃圾回收器回收。
2、什么时候堆内存中的Java对象会变成垃圾呢?
没有更多的引用指向它时。(这个对象无法访问,因为访问对象只能通过引用的方式访问)
3、所以空引用访问“实例”相关的数据一定会出现空指针异常。(错误会显示“java.lang.NullPointerException”)
“实例”相关的数据表示:这个数据访问的时候必须有对象的参与,这就是实例相关的数据。