1 Java中的关键字
1.1 static关键字
static特点 :
- 静态成员被所在类的所有对象共享
- 随着类的加载而加载 , 优先于对象存在
- 可以通过对象调用 , 也可以通过类名调用 , 建议使用类名
static关键字的注意事项
- 静态方法中只能调用静态成员(因为静态成员随着类的加载而加载,非静态成员随着对象的创建而加载,所以要想访问非静态成员可以通过创建对象来调用)
- 非静态方法中可以调用任何成员(非静态成员变量,方法, 静态成员变量,方法)
- 静态方法中不能存在this关键字(因为this代表的是对象,静态成员在加载时还没有对象)
- static一般用在工具类中的方法上
局部变量 成员变量 静态变量
- 局部变量属于方法,成员变量属于对象,静态变量属于类
1.2 final关键字
-
final关键字 : 翻译中文代表最终的意思 , 是java的一个关键字 也是一个修饰符 , 可以修饰类 , 可以修饰方法 , 也可以修饰变量
-
final关键字修饰的特点
- final修饰的类 : 不能被继承 , 没有子类
- fina修饰的方法 : 不能被重写
- final修饰的变量 :
- 基本数据类型 : 值不能改变
- 引用数据类型 : 地址不可发生改变 , 对象的属性可改变
- 注意 :
- 被final修饰的变量 , 我们叫做自定义常量 , 命名规范 : 每个字母需要大写 , 多个单词之间用下划线分割
- final修饰成员变量需要注意初始化时机的问题 , 1) 直接赋值 , 2) 在构造方法执行完毕前赋值
1.3 Java中的权限修饰符
- public -- protected -- 默认的 -- private
2 代码块
2.1 构造代码块
- 构造方法块 : 用一对大括号表示, 定义在类中方法外
- 执行时机 : 每次构造方法执行前, 都会执行构造代码块
- 作用 : 抽取构造方法中共性内容
2.2 静态代码块
- 静态代码块 : 在一对大括号前加上static关键字 , 定义在类中方法外
- 执行时机 : 随着类的加载而加载 , 只加载一次
- 作用 : 一般用于给静态成员初始化
2.3 局部代码块
怎么找一个变量的作用域?
- 变量所在的那对大括号即是作用域范围
3 接口
3.1 接口的定义和特点
- 接口的子类我们叫做实现类
- 要么重写接口中所有的抽象方法
- 要么实现类是一个抽象类
- 注意 : 类与接口的关系是实现关系 , 一个类可以实现多个接口,调用逗号分隔 , 还可以继承一个类的同时 , 实现多个接口 (继承只能继承一个类,不能多继承,可以多层继承)
3.2 接口的成员特点
- 成员变量 : 都是常量 , 默认修饰符 public static final ,它们三个的书写顺序可以随意,但是一般权限修饰符写在最前面,static写在权限修饰符后面,其余的写在static后面
- 构造方法 : 没有构造方法
- 成员方法 : JDK8版本前 只能是抽象方法 , 默认修饰符public abstract
3.5 接口中成员方法的特点
- DK8版本之前 : 只能是抽象方法
- JDK8版本 :
- 默认方法
- JDK8可以在接口中定义非抽象方法(带有方法体的方法) , 需要使用default进行修饰 , 其实就是默认方法
- 作用 : 解决接口升级的问题
- 格式 : public default 返回值类型 方法名(参数) { ... }
- 注意事项 :
- 默认方法不是抽象方法 , 可以继承 , 也可以重写 , 重写需要去掉default关键字
- public 可以省略 , default不能省略
- 如果实现类实现了多个接口 , 有相同的方法声明 , 那么实现类必须重写该方法
- 静态方法
- JDK8可以在接口中定义静态方法 , 也是有方法体的方法
- 作用 : 方便调用此功能
- 格式 : public static 返回值类型 方法名(参数){ ... }
- 注意事项
- 静态方法只能通过接口名调用 , 不能通过实现类名字和对象调用
- public可以省略 , static不能省略
- 默认方法
- JDK9版本 :
- 私有方法
- JDK9中新增私有方法
- 作用 : 抽取默认方法中共性内容
- 格式 : private 返回值类型 方法名(参数){ ... }
- 注意 : 要想抽取静态方法中的共性内容 , 需要对私有方法加上关键字static
- 私有方法
- 接口可以单继承,也可以多继承,还可以多层继承
4 枚举
-
枚举 : 当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型
-
作用 : 更贴切 , 加见名之意
-
定义 : public enum 枚举名{ ... }
-
使用 : 通过枚举类型名直接引用枚举项即可,例如Sex.BOY、Sex.GIRL
注意 : 每个枚举项都相当于枚举的对象 -
案例代码
package com.itheima.enum_demo; public enum Sex { // 每一个枚举项都是枚举的对象 GIRL(\"女孩\"), BOY(\"男孩\"); // 成员变量 private String name; // 空参构造方法 private Sex() { } // 有参构造方法 private Sex(String name) { this.name = name; } // 成员方法 public String getName() { return name; } } class Test { public static void main(String[] args) { System.out.println(Sex.GIRL.getName()); System.out.println(Sex.BOY.getName()); } }
-
枚举的本质 :
- 枚举其实本质上是一个类,每一个枚举项是本枚举类类型的一个对象。我们可以使用JDK提供的反编译命令,将枚举的字节码进行反编译查看
- 枚举本质上就是最终类
- 枚举项,就是枚举类的对象,而且是静态的常量。
- 有私有的构造方法
- 静态代码块
- 继承了lang包下的Enum
- 枚举其实本质上是一个类,每一个枚举项是本枚举类类型的一个对象。我们可以使用JDK提供的反编译命令,将枚举的字节码进行反编译查看
-
组成部分 :
- 构造器,成员方法,成员变量等 , 但是定义的成分一定要在枚举项之后,而且最后一个枚举项必须要有分号结束。
来源:https://www.cnblogs.com/epicenter/p/16310749.html
本站部分图文来源于网络,如有侵权请联系删除。