java final

final关键字可以修饰变量(基本变量与引用),方法和类。

final修饰变量

当修饰基本变量时,表明该变量一旦被初始化为某一值就不能再被改变。

当修饰引用类型的变量时,表示该引用一旦被初始化时指向某个对象,那么这个引用的指向就不能再改变了,但是其指向的对象的值却还是可以改变的。

被final修饰的变量可以通过以下三种方式初始化

在它被定义的时候

    public final int a = 10;

在初始化块里初始化

    public final int a;

    // 初始化块中初始化final变量a
    {        a = 10;
    }

在构造函数里初始化

    public final int a;

    // 构造器中初始化final变量a
    public FinalTest() {
        a = 20;
    }

final修饰形参变量

final用于修饰形参变量,表示不能在方法中更改参数的值。

    // 形参变量c与str均被final修饰
    // 在方法中不能更改c的值,也不能更改str指向的对象
    public void say(final int c, final String str) {
        c = c*2;                   // Error
        str = new String("Hello"); // Error
        System.out.println(c);
        System.out.println(str);
    }

 final修饰方法

final修饰方法,则表明不能被子类重写(覆盖)。这样可以保证在继承中方法行为不变。父类中所有的private方法都是隐式指定为final的。对于private方法,如果我们在子类中定义一个与其完全一样的方法,也不能叫做重写,只是重写定义了一个新的方法。

class Base {

    private void f(){
        System.out.println("Base.private()");
    }
    public final void g(){
        System.out.println("Base.final()");
    }
}


class SubBase extends Base{

    private void f(){
        System.out.println("OverringBase1.f()");
    }
    public  void g(){ ///Error
        System.out.println("OverringBase1.g()");
    }
}

 final修饰类

如果一个类被final修饰则该类不能被继承,当然此时该类中的所有的域都默认是final的。

原文地址:https://www.cnblogs.com/deltadeblog/p/9618178.html