final 关键字修饰的对象或数据一经产生是不可被修改的了。可以修饰变量,方法,方法中的参数,修饰类
修饰变量时
用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。其中的只能进行一次赋值操作是发生在编译期间还是发生在运行时期间?如果是在编译期间就能确定的值(针对基本的数据类型),则编译期间就以常量的形式确定下来。
如果是由经对象之后确定的(请参阅之前相关的文章,类只有在主动使用的情况下才会触发相关的初始化操作。),则会在第一次运行时确定其值。看如下的示例
package com.test; import java.util.Random; class A{ public static final int a=10/5;//这个是在编译期间期,a的值就是已经确定下来了的。等同于a=2.所以是不会触发类的初始化操作 public static final int b=new Random().nextInt(100);//对象的实例是在运行时生成的,在之前就会触发类相关的初始化操作 static{ System.out.println("A static block"); } } public class FinalTest { public static void main(String[] args) { System.out.println(A.a); System.out.println("----------------------"); System.out.println(A.b); } }
输出:
2 ---------------------- A static block 91
示例2