关键字
    abstract:抽象的
    修饰类:这个类不能被new成实体 只能被继承 通过继承去调用内部的属性和方法 去重写内部的抽象方法
    里面可以有抽象方法 也可以由普通方法
    修饰方法:这个方法不能有方法体 这个方法必须存在于抽象类中 这个方法必须被这个类的子类重写
    public abstract void show();
    abstract 不能和private final static一起使用
    final:最终的
    修饰变量:变为常量 值不可再改变
    final int age = 18; 值不可变 final User u = new User(); u.name
    final int[] abc = new int[3]; 数组指向的数组空间地址不可变 但是空间中对象是可变的
    修饰类:最终类 不能再有其他类去继承这个类 类中的方法都有自己完整的方法体(不能有抽象方法)
    public final class 类名{}
    修饰方法:最终方法 可以在任何类中 不能被子类重写 一定具有完整的方法体
    public final void show(){}

    interface:声明接口类的关键字
    public interface 接口名{
    一般放静态常量 可以省略final static 必须要赋值 (接口名 接口引用名 实现类对象 可以调用)
    public 【final】 【static】 int age = 10;
    放抽象方法 省略了abstract
    public 【abstract】 void show();
    8.0默认方法 需要有完整方法体
    public default void show(){
    }
    8.0静态方法 需要有完整方法体 (只能被接口名调用)
    public static void show(){
    }
    9.0以后 私有方法 有完整方法体
    private void show(){
    }
    }

    static:静态
    修饰成员变量和成员方法
    1.原文件编译时就加载—> 注意相互调用的顺序
    2.由static修饰的成员变量 所有对象共享 该变量是保存在方法区中的元数据区中的
    作用:可以避免类实例化的限制—>可以通过类名直接调用
    注意:
    1.静态变量与静态变量的互相调用 有顺序性 静态方法和静态方法的互相调用 没有顺序性
    2.由static修饰的方法中 不能有this关键字
    3.静态方法可以调用其他静态方法及静态成员变量 没有顺序性
    4.普通方法可以调用静态方法和静态变量
    5.静态方法可以调用普通方法 需要new本类对象 通过对象调用普通方法

    extends 继承 implements 实现 instanceof 判定类(boolean)
    this 本类的对象 super父类对象
    public protected (default) private

    代码块:
    1.普通代码块{} 例如: if(){} while(){}
    2.构造代码块 在类中使用{} 优先于构造方法执行 可以有多个 顺序执行
    3.静态代码块static{} 调用本类静态资源前执行 优先于构造代码块

    1. **通过类名直接调用静态资源--》加载静态变量 执行静态代码块
    2. 静态变量和静态代码块有先后顺序(静态方法没有顺序)
    3. **new对象时 先执行静态代码块 才执行构造代码块 再执行构造方法
    4. 父类静态代码块
    5. 静态代码块
    6. 父类构造代码块
    7. 父类无参构造方法
    8. 构造代码块
    9. 无参构造方法
    10. 先找main() 没有就报错
    11. 找到main()后 再观察是否有静态块
    12. 有静态块 先执行静态块 执行完后再走main()内后续的代码
    13. 4.同步代码块:多线程

    猜数字 人机猜拳 银行小程序 商品小程序 学员小程序 快速录入 购票系统 五子棋