final 修饰一个变量,有很多种说法,比如不能改变等等
准确的描述是 当一个变量被final修饰的时候,该变量只有一次赋值的机会
- 在声明的时候赋值
i在第4行已经被赋值过了,所以这里会出现编译错误
1 public class HelloWorld { 2 3 public void method1() { 4 final int i = 5; 5 6 i = 10; //i在第4行已经被赋值过了,所以这里会出现编译错误 7 8 } 9 10 }
- 在声明的时候没有赋值
如果在声明的时候未赋值,那么可以在后面代码进行唯一的一次赋值
- final 修饰其他
final 除了修饰变量,还可以修饰类(不能够被继承),修饰方法(不能够被重写)
练习
如果final修饰的是参数,能否在方法里给这个参数赋值?
1 public class HelloWorld { 2 3 public void method1(final int j) { 4 j = 5; //这个能否执行? 5 } 6 }
答:无法执行,这个变量已经被final修饰了,一旦方法传入了某个参数,就相当于是赋值了,不能再进行以后的赋值