二、面向对象
java中OOA,OOT,OOP,OOD,OOSM,OOM表示的含义是什么?
OOA(Object Oriented Analysis):面向对象分析
OOT (Object Oriented Testing): 面向对象测试
OOP(Object Oriented Programming):面象对象编程
OOD(Object Oriented Design):面向对象设计
OOSM(Object Oriented Software Maintenance):面向对象软件维护
OOM(Object Oriented Method):面向对象方法
1、面向对象思想(OOP):
概述:面向对象是相对面向过程而言的,面向过程强调的是功能,面向对象强调将功能封装进对象,强度具备功能的对象;
特征:
封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式
继承:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
多态:一个对象在程序不同运行时刻代表的多种状态,父类或者接口的引用指向子类对象。
2、类和对象:
类:对现实世界中某类事物的描述,是抽象的,概念上的定义。
对象:事物具体存在的个体。
3、成员变量和局部变量的区别(重点):
成员变量 | 局部变量 | |
---|---|---|
作用域 | 针对整个类有效 | 只在某个范围内有效(一般指的就是方法,语句体内) |
存储位置 | 随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中 | 在方法被调用,或者语句被执行的时候存在,存储在栈内存中,当方法调用完,或语句结束后,自动释放 |
初始值 | 有默认初始值 | 没有默认初始值,使用前必须赋值 |
4、匿名对象:
匿名对象就是没有名字的对象,是对象的一种简写方式。
应用场景:
A:只调用一次类中的方法
B:可以作为实际参数在方法传递中使用
5、不同修饰符可以修饰哪些内容:
当前类 | 同一包内 | 子孙类(不同包) | 其他包 | |
---|---|---|---|---|
public | OK | OK | OK | OK |
protected | OK | OK | OK | |
default | OK | OK | ||
private | OK |
6、Object类:
-
是所有类的根类,超类。
java中提供的类以及我们自定义的类都直接或间接的继承自Object类 -
Object类中的方法
A:void finalize()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
B:Class getClass()
获取对象的字节码文件的描述类,后面再讲反射的时候还会在说这个类
String name = s.getClass().getName();
C:int hashCode()
获取对象的哈希值。其实就是对象的内存地址值十进制表示
D:String toString()
返回对象的字符串表示。
E:boolean equals(Object obj)
用于比较两个对象的地址值是否相同 -
== 和equals的用法:
A: ==怎么用?
可用于比较基本数据类型,比较的就是基本数据类型的值是否相等
可用于比较引用数据类型,比较的是对象的地址值是否相等
B: equals怎么用?
equals只能用于比较引用数据类型
Object提供的equals是用于比较对象地址值是否相同
7、抽象类(abstract):
- 概念:
多个类有相同的声明,但是方法体不一样。这个时候,我们考虑把方法声明进行抽取。让子类继承后,自己去实现方法体。没有方法体的方法,我们需要用抽象标志下。 - 特点:
(1)抽象类和抽象方法都要用abstract进行修饰
(2)抽象类不能被实例化
(3)抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类 - 抽象类中数据特点:
(1)成员变量:抽象类中可以有变量,也可以有常量
(2)成员方法:抽象类中可以有抽象方法,也可以有非抽象方法
(3)构造方法:抽象类是一个类,它有构造方法,本身不能被实例化,但可以给子类实例化使用 - 抽象类中的问题:
(1)抽象关键字abstract不可以和哪些关键字共存?
private:私有内容子类继承不到,所以不能重写。但是abstract修饰的方法要求被重写
final:final修饰的方法不能被重写,但是abstract修饰的方法要求被重写
static:假如一个抽象方法能通过static修饰,这个方法可以直接通过类名调用,而抽象方法是没有实体的,这样的调用无意义。所以不能用static修饰
8、关键字:
-
super
super()意为调用父类中不带参数的构造方法
super(name)意为调用父类中带参数的构造方法
super必须放在子类构造器的第一行 -
this:
代表本类对象的一个引用,谁调用this所在的方法,this就代表谁
使用场景:a.用于区分同名成员变量和局部变量
b.在定义函数时,该函数内部要用到调用该函数的对象时,因为此事对象还没建立,故this代表此对象
c.构造函数时调用,this(参数)必须作为第一条语句存在 -
final:
最终的意思,修饰类、方法、变量
final修饰的类不能被继承,修饰的方法不能被重写,修饰的变量是一个常量,只能被赋值一次
内部类只能访问被final修饰的局部变量 -
static:
静态的意思,修饰成员变量和成员函数
静态的特点:a.随着类的加载而加载
b.优先于对象存在
c.对所有对象共享
d.可以被类名直接调用
静态的注意事项:a.静态方法只能访问静态成员(因为静态的内容是随着类的加载而加载,它是先进内存的)
b.静态方法中不能使用this,super关键字
c.主方法是静态的public static void main(String[] args)
public:公共的意思,是最大权限修饰符
static:由于jvm调用main方法的时候,没有创建对象,只能通过类名调用。
void:由于mian方法是被jvm调用,不需要返回值,用void修饰
main:主要的意思,所以jvm采用了这个名字,是程序的入口
String[]:字符串数组
args:数组名
9、静态变量和成员变量的区别:
- 调用方式
静态变量也称为类变量,可以直接通过类名调用。
也可以通过对象名调用。这个变量属于类。
成员变量也称为实例变量,只能通过对象名调用。这个变量属于对象。 - 存储位置
静态变量存储在方法区长中的静态区。
成员变量存储在堆内存。 - 生命周期
静态变量随着类的加载而存在,随着类的消失而消失。生命周期长。
成员变量随着对象的创建而存在,随着对象的消失而消失。 - 与对象的相关性
静态变量是所有对象共享的数据。
成员变量是每个对象所特有的数据。 - 静态的优点和弊端:
优点:
对对象的共享数据进行单独空间的存储,节省内存,没有必要每个对象都存储一份
可直接被类名调用
弊端:
生命周期过长,随着类的消失而消失
访问出现权限,即静态虽好但只能访问静态 - 什么使用使用静态呢
A:当所有对象共享某个数据的时候,就把这个成员变量定义为静态修饰的。
B:当某个方法没有访问该类中的非静态成员,就可以把这个方法定义为静态修饰。
静态的生命周期比较长,所以一般不推荐使用。 - 静态代码块
A:它只执行一次,它比main还先执行。
B:执行顺序
静态代码块–构造代码块–构造方法