final 最终的 不可更改的

    1.可以修饰什么?
    2.修饰后有什么特点

    修饰变量
    一旦变量存了一个值 若用final修饰后 则不让再次改变—->相当于常量

    final int a;//如果在定义变量时没有赋初值 给变量一次存值的机会
    //(因为变量在栈内存空间内 没有默认值 如果不给赋值的机会 就没法用)
    a = 10;
    a=100;//若此时还想再赋值 编译会报错
    注意变量类型是基本类型还是引用类型
    如果修饰的是基本类型 则变量的值不让更改——>常量
    如果修饰的是引用类型 则变量的地址引用不让更改—->对象唯一

    final int[] x = new int[]{1,2,3};
    x[0] = 10;//因为x里的地址引用没有改变 所以可以改变数组存储的内容
    x = new int[5];//这个时候地址引用发生改变 编译报错
    修饰属性
    final修饰的属性相当于全局变量 存储在堆内存的对象空间内一个空间
    正常的属性若没有赋值 有默认值存在
    若属性用final修饰后 必须给属性赋初值 否则编译报错
    final修饰属性 那么属性一旦被分配内存空间 就必须初始化 并且之后不可变

    final修饰属性 初始化只有三种方法 直接赋值 或 在构造方法中赋值 或 程序块中
    特点与修饰变量一致
    注意变量类型是基本类型还是引用类型
    如果修饰的是基本类型 则变量的值不让更改——>常量
    如果修饰的是引用类型 则变量的地址引用不让更改—->对象唯一
    修饰方法
    方法是最终的方法 不可更改
    即final修饰的方法 要求子类不能重写父类的方法
    修饰类本身
    类是最终的 不可以更改
    即此类不可以被其他子类继承
    通常都是一些定义好的工具类
    比如 Math Scanner Integer String