主要内容:
- 静态方法中只能调用静态成员
- 非静态方法中可以调用任何成员
-
1.2 final关键字
概述
翻译中文代表最终的意思,是java的一个关键字,也是一个修饰符,可以修饰类,可以修饰方法,也可以修饰变量
特点
修饰类:不能被继承,没有子类(太监类)
- 修饰方法:不能被重写
- 修饰变量:
- 基本数据类型:值不能改变
- 引用数据类型:地址不可发生改变,对象的属性可改变
- 注意
代码块
概述、位置 | 执行时机 | 作用 | |
---|---|---|---|
构造代码块 | 用一对大括号表示 定义在类中方法外 |
每次构造方法执行前 都会执行构造代码块 |
抽取构造方法中共性内容 |
静态代码块 | 在一对大括号前+static 定义在类中方法外 |
随着类的加载而加载,只加载一次 | 一般用于给静态成员初始化 |
接口
介绍
- 接口:如果一个类中方法都是抽象方法,那么这个类应该是定义规则的类,我们应该把此类定义为接口,接口是一种引用数据类型
作用:
定义接口的关键字:interface
- public interface 接口名{…}
- 类与接口之间的关系是实现关系,用关键字implements进行连接
- public class 类名 implements 接口名 {…}
- 接口不能实例化
- 接口的子类我们叫做实现类
- 要么重写接口中所有的抽象方法
- 要么实现类是一个抽象类
注意:类与接口的关系是实现关系,一个类可以实现多个接口,调用时用逗号隔开,还可以继承一个类的同时,实现多个接口
接口的成员特点
成员变量:都是常量,默认修饰符 public static final
- 构造方法:没有构造方法
成员方法:只能时抽象方法,默认修饰符public abstract
JDK8版本之前:只能是抽象方法
- JDK8版本:
- 默认方法
- JDK8可以在接口中定义非抽象方法(带有方法体的方法),需要使用default进行修饰,其实就是默认方法
- 作用:解决接口升级的问题
- 格式:public default 返回值类型 方法名(参数){…}
- 注意事项:
- 默认方法不是抽象方法,可以继承,可以重写,重写需要去掉default关键字
- public 可以省略,default不能省略
- 如果实现类实现了多个接口,有相同的方法声明,那么实现类必须重写该方法
- 静态方法
- JDK8可以在接口中定义静态方法,也是有方法体的方法
- 作用:方便调用此功能
- 格式:public static 返回值类型 方法名(参数){…}
- 注意事项
- 静态只能通过接口名调用,不能通过实现类名字和对象调用
- public可以省略,static不能省略
- 默认方法
JDK9版本:
枚举:当一个变量有几种固定可能的取值时,就可以讲它定义为枚举类型
- 作用:更贴切,更加见名知意
- 定义:public enum 枚举名{…}
使用:通过枚举名直接引用枚举项即可,例如Sex.BOY、Sex.GIRL
枚举其实本质上是一个类,每一个枚举项是本枚举类型的一个对象。我们可以使用JDK提供的反编译命令,将枚举的字节码进行反编译查看
- 枚举本质上就是最终类
- 枚举项,就是枚举的对象,而且是静态的常量
- 有私有的构造方法
- 静态代码块
- 继承了lang包下的Enum
- 组成部分:
- 构造器
- 成员方法
- 成员变量等
- 但是定义的成份一定要在枚举项之后,而且最后一个枚举项必须要有分号结束。