接口
1. 接口的概述
1.1 什么是接口
- 接口是更加彻底的抽象,接口中只能是抽象方法和常量(JDK 1.8之前)
1.2 接口有啥用
- 接口体现的是规范思想,实现接口的类必须重写完接口中全部的抽象方法
- 接口体现的是一种约束思想(规范)
1.3 接口的定义格式
修饰符 interface 接口名称{
}
注意:定义接口的关键字:interface
1.4 接口中成分的特点
- 接口中只能是抽象方法和常量
- 接口中的抽象方法是可以省略public abstract不写,默认会加上。
- 常量:规范是变量名称全部大写,多个单词用下划线连接,必须有值!!
- public static final String SCHOOL_NAME = "常量值" ;
- public static final 可以省略不写,默认会加上
1.5 接口的实现类格式
修饰符 class 实现类名称 implements 接口1,接口2,接口3...{...}
- 接口是用来被子类实现的.类与接口是实现关系.实现接口的类叫"实现类"
- 一个类实现了接口,必须重写完接口的全部抽象方法,否则这个类必须定义成抽象类。
- 接口体现的是一种强制性的约束(规范思想)
- 接口是可以被多实现的,一个类可以实现多个接口
- 一个类实现了多个接口,必须重写完全部接口的全部抽象方法,否则这个类必须定义成抽象类
1.6 接口与接口的多继承
- 类与类是单继承关系。 一个类只能继承一个父类。
- 类与接口是多实现关系。一个类可以同时实现多个接口。
- 接口与接口是多继承关系。一个接口可以继承多个接口。
1.7 JDK8之后新增方法
- 默认方法(实例方法):必须用接口的实现类的对象访问。
- 用 default 修饰
- 静态方法:必须(只能)用接口的名称来访问。
- 用 static 修饰
- 私有方法(私有的实例方法):只能在接口中被其他方法(默认方法,私有方法)访问
- 用 private 修饰
1.8 注意事项
- 如果实现了多个接口,多个接口中存在同名的静态方法并不会冲突,
- 原因是只能通过各自接口名访问静态方法。
- 当一个类,既继承一个父类,又实现若干个接口时,(重点)
- 父类中的成员方法与接口中的默认方法重名,子类就近选择执行父类的成员方法。
- 当一个类实现多个接口时,多个接口中存在同名的默认方法。
- 实现类必须重写这个方法。
- 接口中,没有构造器,不能创建对象
代码块
- 代码块是类的五大成分之一(成员变量,构造器,方法,代码块,内部类)
-
代码块按照有无static修饰可以分为静态代码块和实例代码块
- 静态代码块:
-- 有static修饰,属于当前类本身,与类一起优先加载,加载的时候会自动执行。
-- 格式:
static{
}
-- 静态代码块的作用可以在类执行方法之前进行静态资源数据的初始化操作。
静态代码块可以与类一起优先加载,会自动触发执行
可以用于对静态资源进行初始化操作 - 实例代码块:
-- 无static修饰的,属于类的每个对象的,会与对象一起加载,每次创建对象的时候都会自动执行一次。
-- 格式: {}
-- 可以用于初始化实例资源的数据。
实例代码块属于类的每个对象,会与对象一起加载并执行。
实例代码块可以用于初始化实例资源的数据。
拓展:
代码其实是提取到每一个构造器中去的
- 静态代码块:
fianl关键字
- final是最终的含义
-
final可以修饰类,方法,变量
- final修饰类,类不能被继承了。
- final修饰方法,方法不能被重写。
- final可以修饰变量的总规则:变量有且仅能被赋值一次。
- final可以修饰局部变量
- 这个变量的值被保护了,不能被修改了
- final可以修饰静态变量
- 成为常量了,值不变,只有一份,变量名称大写,下划线连接
- final修饰静态变量
- 可以在静态代码块赋值一次 , 或者定义的时候赋值一次。
- final可以修饰实例变量
- 可以在定义的时候赋值一次,可以在实例代码块赋值一次,可以在全部构造器赋值1次
- final可以修饰局部变量
单例模式
1. 含义
- 单例模式,是一种常用的软件设计模式。通过单例模式可以保证系统中,
应用该模式的这个类永远只有一个实例。即一个类永远只有一个对象实例。
2. 应用场景
- 在实例开发中,有很多业务对象永远只需要一个,无论启动多少次
我们只需要一个对象,例如任务管理对象,只需要一个。节约内存和性能。
3. 设计方法
3.1 饿汉单例模式
- 在用类的时候,对象已经创建好了。
- 步骤:
a.定义一个对象,最好static和final修饰,这样这个对象永远是唯一不可变的对象了。
b.把构造器进行私有化,外面就不能创建新对象。
c.提供一个方法把唯一的单例对象返回出去。
3.2 懒汉单例模式
- 你真正需要的时候,才创建一个对象。
- 步骤:
a.定义一个对象变量用于后面存储一个对象,此时是没有创建对象的。
b.把构造器进行私有化,外面就不能创建新对象。
c.提供一个方法,等需要对象的时候判断是否有一个唯一对象,如果没有创建一个对象。
以后都是直接返回这个对象即可!!
枚举
1. 枚举是一种特殊的类型
- 枚举类型的代表是Enum。
2. 枚举的作用?
- 可以用于做信息分类和信息标志。
3. 定义枚举的格式
enum 枚举名称{
// 第一行是枚举实例,相当是多个实例对象。
}
4. 枚举的特点:
- 枚举类是用final修饰的,枚举类不能被继承。
- 枚举类默认继承了 java.lang.Enum<Oritation>
- 枚举类第一行只能罗列的是当前枚举类的对象,我们只需要申明名称即可(他们都是常量,存储的是对象)
- 枚举相当于是多例模式,你第一行罗列了几个对象枚举就只有几个对象。
- 枚举类的构造器默认是私有的,不能在外部创建对象。
枚举是通过这些实例的名称做信息分类。
枚举做信息分类非常严谨,可读性比较好。