Java SE阶段面向对象知识整理

面向对象

static关键字

概述:是静态修饰符,可以用来修饰成员变量,成员方法,代码块

补充:类有五个部分所组成,成员变量,成员方法,构造器,代码块,内部类

修饰成员变量:

1.类变量:被static修饰的成员变量,属于类,内存中只有一份,被类和类的对象所共享
​
访问格式:类名.类变量(推荐使用)
​
•       对象.类变量
​
2.实例变量:没有被static修饰的成员变量,属于对象,每个对象中都又属于自己的一份实例变量
​
访问格式:对象.实例变量
​
3.应用场景:某个数据只有一份,并且需要被所有对象共享时,建议该数据定义为类变量

修饰成员方法:

1.类方法:被static修饰的成员方法,属于类
​
访问格式:类名.类方法(推荐使用)
​
•       对象.类方法
​
实例方法:没有被static修饰的成员方法,属于对象
​
访问格式:对象.实例方法
​
应用场景:在工具类中会使用类方法
​
工具类:概述:将一些共性功能封装到某个类中,让程序员使用
​
组成:1.所有的方法必须是类方法——>调用方便,可以直接调用
        类名.类方法进行使用
​
•    2.构造器私有——>节省内存

修饰代码块:

静态代码块:
​
格式:static{}
​
特点:随着类的加载而执行一次,优先于对象存在
​
作用:真实开发时用来给复杂的数据进行初始化赋值
​
实例代码块:
​
格式:{}
​
特点:随着对象的加载而加载,每创建一次对象就执行一次代码块,而且是在构造器之前执行
​
作用:真实开发时,将多个构造器中重复的代码抽取带实例代码块中

static访问特点:

静态成员只能访问静态成员

设计模式

概述:开发时解决问题的最优解,称为设计模式,Java二十多种常见的设计模式
​
单例设计模式:
​
1.解决什么问题?——>保证一个类只创建一个对象
​
2.编码步骤:(1)构造器私有
​
•           (2)定义类变量记录该类的一个对象
​
•           (3)定义类方法返回该类变量
​
分类:
​
饿汉式单例——>获取对象时,对象就已经创建好了。空间换时间
​
懒汉式单例——>获取对象时,才开始创建对象。时间换空间。

继承

概述:

让一个类和另一个类创建父子关系,子类 extends 父类

特点:

1.子类会继承父类所有的非私有成员,子类还可以根据自己的需求定义属于自己的成员

2.创建子类对象:是由子类和父类多个类共同创建出来的

好处:

可以抽取代码的共性,减少重复代码的编写,提高代码的复用性,提高开发效率

注意事项:

权限修饰符:

private:私有,只能在本类中调用

缺省:同一个包中的其他类可以调用

protected:任意包下的子孙类

public:公共

单继承:

Java继承只支持单继承,不支持多继承,但支持多层继承

所有的类都直接或者间接的继承了object(祖宗类)

方法重写:

概述:父类方法无法满足子类的需求时,子类可以重写一个和父类方法一模一样的方法,覆盖父类方法

注意事项:

1.重写方法上建议加上@Ovrride注解,检查重写格式是否正确

2.子类重写方法和父类方法证声明一致

使用场景:重写object类的toString方法

子类方法中访问其他成员的特点:

1.访问成员,遵循就近原则 先子类局部——>子类成员——>父类成员——>报错

2.在子类方法中直接访问父类成员,super.父类成员

super代表父类存储空间标识,理解父类对象引用

子类构造器特点:

先执行父类构造器,再执行子类自己的构造器

子类所有构造器第一行隐藏super(),调用父类对应的构造器

问题——>如果父类没有无参构造,子类会直接报错

解决:1.手动给父类提供一个无参构造器 2.使用super(传参)调用父类有参构造器

作用:super(传参),多一种给父类成员变量的赋值方式

this和super的区别:

this是访问本类的成员(成员变量,成员方法),本类构造方法

super是访问父类的成员(成员方法,成员变量),父类构造方法

多态

概述:对象在不同时刻展现的多种形态

前提:1.要有继承/实现关系 2.要有父类引用指向子类对象 3.要有方法重写

多态方式创建对象访问成员:

访问成员方法,编译看左,运行看右

访问成员变量时,编译看左,运行看左

好处和弊端:

好处:定义方法时,将方法形参定义为父类类型,可以接收所有子类对象,提高程序拓展性

弊端:不能调用子类特有的功能

解决:强制类型转换,子 = (子)父

问题:真实类型不匹配,报类型转换异常的错

解决:intanceof关键字,可以判断父类真实类型

final

概述:最终修饰符,可以用来修饰类,方法,变量

特点:

修饰类,类不能被继承 工具类建议使用final修饰

修饰方法,方法不能被重写 模板方法设计模式中的模板方法建议用final修饰

修饰变量,变量只能在定义时被赋值一次,引用数据类型指的是地址值不能改变 建议常量时使用

常量:

概述:被static final修饰的成员变量称为常量

作用:系统作为配置信息存储使用

特点:1.命名所有字母大写,多个单词之间用下划线连接

2.阅读性强,维护性强

3.常量编译后可以被宏替换,替换成字面量,节省内存

抽象类和抽象方法

概述:被abstract修饰的类(方法)成为抽象类(抽象方法)

抽象方法没有方法体

特点:1.抽象类中可以有非抽象方法,有抽象方法的类一定是抽象类

2.抽象类中可以有所有普通类的成员(普通类中有的,抽象类中也都有)

3.抽象类不能创建对象,一般作为一种特殊的父类使用

4.子类继承抽象类后,必须重写抽象类中所有的抽象方法

作用:制定规则

应用场景:模板方法设计模式

解决问题:解决多个方法中重复代码的问题

实现步骤:

1.定义抽象类

2.定义模板方法,将多个方法的重复代码抽取到该方法中,建议用final修饰

3.定义抽象方法,让子类重写该方法,完成具体的功能实现

4.在模板方法中调用抽象方法

接口

概述:被interface修饰的一种特殊结构,本质是一个Java类

特点:

1.成员变量默认被static final修饰,都是常量。成员方法默认被public abstract修饰,都是抽象方法。

3.实现类实现多个接口后,必须重写里面所有的抽象方法

作用:制定规则

好处:

1.弥补单继承的不足

2.面向接口编程,程序变得更加灵活,且拓展性更好

接口两个注意事项(了解)

接口jdk1.8之后可以定义三种方法,都有方法体:

默认方法default

私有方法private

静态方法static

接口和接口之间是多继承关系

内部类:

分类:

成员内部类,静态内部类,局部内部类

匿名内部类:

概述:是一种特殊的局部内部类,定义在局部范围(方法,代码块,构造器)

格式:

new 类/接口(){重写方法};

做了两件事:

1.定义一个该类/接口的子类/实现类

2.并立即创建出该子类/实现类的对象

作用:更为简单创建子类/实现类对象

常见应用场景:也可以将匿名内部类对象作为参数进行传递

枚举:

概述:是一种特殊的类

格式:使用enum关键字定义的一种结构,public enum 类名{}

特点:枚举类第一行只能枚举项,而且每个枚举项都是常量,都是枚举类的一个对象

应用场景:用来标识一组信息,然后作为参数进行传递

泛型:

概述:定义类,接口,方法,时,可以添加<类型变量>,接收一个数据类型,称为泛型类,泛型接口,泛型方法,统称泛型

作用:使用来行变量接收数据类型,编译期间限制操作数据类型,避免强制类型转换出现的问题

自定义泛型:

自定义泛型类:public class XXX <类型变量,....>

自定义泛型接口:public interface XXX <类型变量,....>

自定义泛型方法:public <类型变量,....> void aaa(){}

类型变量定义在修饰符和返回值类型中间

类型变量只能在方法中局部范围使用

通配符,上下限:

通配符:?,使用泛型时,接收任意数据类型

上限:?extends 类型,使用泛型时,接收该类和所有的子孙类

下限:?super 类型,使用泛型时,接收类和所有的父类

两个面试题:

泛型擦除机制:程序编译后,class中所有的泛型都会被擦除成Object类型,节省空间

不能接收基本数据类型:基本数据类型不是Java类和object没有任何关系,无法相互转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值