学习目标
- 关键字
- final
- static
- 代码块
- 静态代码块
- 构造代码块
- 局部代码快
- 接口
- 接口的作用及格式
- 接口的成员定义
- 接口在JDK不同版本中方法的改进
枚举
final修饰的类是最终类,没法继承,也就是没有子类
- final修饰的变量:基本数据类型是最终值,不可以再改变
- 引用数据类型:地址不可发生改变,内容可以改变
-
1.3 什么时候使用static关键字 ?
1.4 static关键字特点及静态方法访问特点 ?
静态成员被所类的所有对象共享
- 随着类的加载而加载,优先于对象加载
- 可以通过对象调用 , 也可以通过类名调用 , 建议使用类名调用
静态方法访问特点:
- 静态方法只能调用静态成员,要想访问非静态成员,需要创建对象来完成
- 静态方法不能存在this,this表示的是对象,因为静态成员优先于对象进入内存,而先进内存的不能调用后进内存的
-
1.5 Java中的权限修饰符
public — protected — 默认的 — private
同一个类中都可以用
- 同一个包(无论是否是子父类)除了private都可以
- 不同包(子父类)默认和private不能用
-
2. 代码块
2.1 构造代码块
构造方法块 : 用一对大括号表示, 定义在类中方法外
- 执行时机 : 每次构造方法执行前, 都会执行构造代码块
- 作用 : 抽取构造方法中共性内容
- 静态代码块 : 在一对大括号前加上static关键字 , 定义在类中方法外
- 执行时机 : 随着类的加载而加载 , 只加载一次
- 作用 : 一般用于给静态成员初始化
局部代码块:用一对大括号表 , 可以定义在任何的局部位置 , 方法中居多
作用:
定义接口的关键字使用interface
- public interface 接口名{ … }
- 类与接口之间的关系是实现关系 , 用关键字implements进行连接
- public class 类名 implements 接口名 { … }
- 接口不能实例化(不能创建对象)
- 接口的子类我们叫做实现类(public class 类名 implements 接口名)
- 要么重写接口中所有的抽象方法
- 要么实现类是一个抽象类
注意 : 类与接口的关系是实现关系 , 一个类可以实现多个接口,调用逗号分隔 , 还可以继承一个类的同时 , 实现多个接口
public interface Inter {public abstract void show();public abstract void method();}interface Inter2 {}
public class InterImpl implements Inter ,Inter2{@Overridepublic void show() {}@Overridepublic void method() {}}
2.3接口有什么特点
成员变量 : 都是常量 , 默认修饰符 public static final
- 构造方法 : 没有构造方法(不能创建对象)
成员方法 : 只能是抽象方法 , 默认修饰符public abstract
jdk8.0新增了默认方法,方便解决接口升级的问题
格式 :public default 返回值类型 方法名(参数) { ... }<br />默认方法不是抽象方法 , 可以实现类继承 , 也可以重写 , 重写需要去掉default关键字
jdk9.0新增了私有方法,
作用 : 抽取默认方法中共性内容
格式 : private 返回值类型 方法名(参数){ … }
要想抽取静态方法中的共性内容 , 需要对私有方法加上关键字static
3. 枚举
3.1 枚举能解决什么问题 ?
- 当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型
-
3.2 枚举常用的方式 ?
格式: public enum 枚举名{ … }
使用 : 通过枚举类型名直接引用枚举项即可,例如Sex.BOY、Sex.GIRL注意 : 每个枚举项都相当于枚举的对象 ```java public enum Sex { // 每一个枚举项都是枚举的对象 GIRL(“女孩”), BOY(“男孩”), YAO;// 成员变量 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()); System.out.println(Sex.YAO.getName()); } } ```
4. 当日问题小结
4.1 当日遇到的问题
4.2 出现问题原因
4.3 解决问题方案
可以用类名调用静态成员,而非静态方法需要创建对象调用
