学习目标

  • 关键字
    • final
    • static
  • 代码块
    • 静态代码块
    • 构造代码块
    • 局部代码快
  • 接口
    • 接口的作用及格式
    • 接口的成员定义
    • 接口在JDK不同版本中方法的改进
  • 枚举

    • 枚举的作用及格式
    • 枚举的使用
    • 枚举的本质

      1. 关键字

      1.1 final能修饰什么 ?

      final可以修饰变量,方法以及类

      1.2 final修饰的成员的特点是什么 ?

  • final修饰的类是最终类,没法继承,也就是没有子类

  • final修饰的变量:基本数据类型是最终值,不可以再改变
    • 引用数据类型:地址不可发生改变,内容可以改变
  • final修饰的方法不可以重写

    1.3 什么时候使用static关键字 ?

    static是用来修饰变量,方法修饰成员,变为静态

    1.4 static关键字特点及静态方法访问特点 ?

  • 静态成员被所类的所有对象共享

  • 随着类的加载而加载,优先于对象加载
  • 可以通过对象调用 , 也可以通过类名调用 , 建议使用类名调用

静态方法访问特点:

  • 静态方法只能调用静态成员,要想访问非静态成员,需要创建对象来完成
  • 静态方法不能存在this,this表示的是对象,因为静态成员优先于对象进入内存,而先进内存的不能调用后进内存的
  • 非静态方法可以访问所有成员

    1.5 Java中的权限修饰符

    public — protected — 默认的 — private

  • 同一个类中都可以用

  • 同一个包(无论是否是子父类)除了private都可以
  • 不同包(子父类)默认和private不能用
  • 不同包(无关类)只有public可用

    2. 代码块

    2.1 构造代码块

  • 构造方法块 : 用一对大括号表示, 定义在类中方法外

    • 执行时机 : 每次构造方法执行前, 都会执行构造代码块
    • 作用 : 抽取构造方法中共性内容
  • 静态代码块 : 在一对大括号前加上static关键字 , 定义在类中方法外
    • 执行时机 : 随着类的加载而加载 , 只加载一次
    • 作用 : 一般用于给静态成员初始化
  • 局部代码块:用一对大括号表 , 可以定义在任何的局部位置 , 方法中居多

    • 正常执行
    • 作用:用于控制变量的作用域

      3. 接口

      2.1 接口能解决什么问题 ?

      接口 : 如果一个类中都是抽象方法 , 那么这个类应该是定义规则的类 , 我们应该把此类定义成接口,接口是一种引用数据类型
  • 作用:

    • 用于定义规则
    • 程序的拓展性

      2.2 接口的成员能定义什么 ?

  • 定义接口的关键字使用interface

    • public interface 接口名{ … }
  • 类与接口之间的关系是实现关系 , 用关键字implements进行连接
    • public class 类名 implements 接口名 { … }
  • 接口不能实例化(不能创建对象)
  • 接口的子类我们叫做实现类(public class 类名 implements 接口名)
    • 要么重写接口中所有的抽象方法
    • 要么实现类是一个抽象类
  • 注意 : 类与接口的关系是实现关系 , 一个类可以实现多个接口,调用逗号分隔 , 还可以继承一个类的同时 , 实现多个接口

    1. public interface Inter {
    2. public abstract void show();
    3. public abstract void method();
    4. }
    5. interface Inter2 {
    6. }
    1. public class InterImpl implements Inter ,Inter2{
    2. @Override
    3. public void show() {
    4. }
    5. @Override
    6. public void method() {
    7. }
    8. }

    2.3接口有什么特点

  • 成员变量 : 都是常量 , 默认修饰符 public static final

  • 构造方法 : 没有构造方法(不能创建对象)
  • 成员方法 : 只能是抽象方法 , 默认修饰符public abstract

    • jdk8.0新增了默认方法,方便解决接口升级的问题

      1. 格式 :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) {

    1. this.name = name;

    }

    // 成员方法 public String getName() {

    1. 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 当日遇到的问题

对static静态有点迷糊,起初以为非静态方法比较方便

4.2 出现问题原因

因为非静态方法可以调用所有成员,静态方法只能调用静态成员

4.3 解决问题方案

可以用类名调用静态成员,而非静态方法需要创建对象调用