ITEEDU

声明Final常量

我们可以看看下面一个类顶部的声明:

static int intVal = 42;
static String strVal = "Hello, world!";

当一个类第一次使用时,编译器会调用一个类初始化方法——<clinit>,这个方法将42存入变量intVal,并且为strVal在类文件字符串常量表中提取一个引用,当这些值在后面引用时,就会直接属性调用。

我们可以用关键字“final”来改进代码:

static final int intVal = 42;
static final String strVal = "Hello, world!";

这个类将不会调用es a <clinit>方法,因为这些常量直接写入了类文件静态属性初始化中,这个初始化直接由虚拟机来处理。代码访问intVal将会使用Integer类型的42,访问strVal将使用相对节省的“字符串常量”来替代一个属性调用。

将一个类或者方法声明为“final”并不会带来任何的执行上的好处,它能够进行一定的最优化处理。例如,如果编译器知道一个Get方法不能被子类重载,那么它就把该函数设置成Inline。

同时,你也可以把本地变量声明为final变量。但是,这毫无意义。作为一个本地变量,使用final只能使代码更加清晰(或者你不得不用,在匿名访问内联类时)。