1.final修饰属性:可以赋值的位置:显式初始化、代码块中初始化、构造器中初始化。不能通过set方法或者“对象.属性”进行赋值
class A{ final int A1 = 0;//显式初始化 final int A2; final int A3; { A2 = 1;//代码块中初始化 } A(int num){ A3 = num;//构造器中初始化 } }
2.final修饰局部变量:是一个常量,不能修改。当final修饰的是形参时,表明此形参是常量,当调用此方法时,给常量赋一个实参,一旦赋值后,只能在方法体内使用形参,不能修改形参。
class Person{public int i;} public void add(final Person p) { p.i++;//这个没问题,因为final修饰的是p不是i,p的地址没变就可以,i变不变都行。若是在方法中有p=new Person();则出错 }