final表示最终的,不可变的,可以用来修饰数据、方法和类。

1、final数据

final用来定义一个常量,表示其一旦被初始化后,其值将不能再被改变。

final可以定义一个编译时常量

final int const = 1;//编译时被初始化,此后不能被改变

也可以定义一个运行时被初始化的常量

final int const2 = new Random(20).newxtInt(10);

还可以定义一个空白final(意为被声明为final但是为给定初值)。

public class Final {
    final int j;
    public Final() {
        j=3;    //必须在构造器中进行初始化
    }
}

final参数意味着无法改变该参数的值。主要用来向匿名内部类传递数据。

注意:final修饰引用变量时,只表示引用值是不能改变的,即该引用不能再指向其他对象。但是该引用所指向的对象自身是可以被修改的。数组也是对象。

2、final方法

final方法在继承中无法被改变。

所有的private方法都被隐式地指定为是final的。

试图覆盖一个private方法时编译器不会给出错误信息,但是这并不意味着覆盖成功,而仅仅意味着子类有了一个基类接口未提供的新方法。

3、final类

该类不能被继承。

其内部数据可以选择是否定义为final;其内部方法都被隐式地定义为final,因为无法覆盖它们。