final可以用来修饰的结构:类,方法,变量

    final用来修饰一个类:此类不能被其他类所继承。比如String类,System类,StringBuffer类


    final用来修饰方法,表示此方法不可以被重写,比如Object类中getClass()

    final用来修饰变量:此时”变量”就称为是一个常量

    1)final修饰属性:可以考虑赋值的位置有:显示初始化,代码块中初始化,构造器中初始化。

    1. class NewPerson {
    2. final int WIDTH = 0; //显示初始化
    3. final int LEFT;
    4. {
    5. LEFT = 1; //代码块中初始化
    6. }
    7. final int RIGHT;
    8. //构造器中初始化
    9. public NewPerson() {
    10. RIGHT = 2;
    11. }
    12. public NewPerson(int right){
    13. this.RIGHT=right;
    14. }
    15. }

    2)final修饰局部变量:尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。

    final static 用来修饰属性:全局常量

    问题:代码块给final static 修饰的属性赋值,编译报错。
    image.png

    对于非静态代码块每创建一个对象,就执行一次非静态代码块,所有如果创建多个对象,也就会有多个赋值,跟final关键字相违背。