final意为最终的,不可变的
修饰变量
final变量一旦初始化,就不允许修改
属性
在构建对象时final属性必须进行赋值,不管采用的是直接赋值、非静态代码块赋值、构造器赋值三种方法中的哪一种,但一旦赋值就不允许修改
class Aa{
final String name = "人"; //指定final属性必须给出一个初始化,否则报错
public A1(){
name = "ss"; //语法报错,name已经被赋值了,在构造器中赋值属于2次赋值。
}
}
局部变量
局部变量要求声明的同时必须赋初始值,也可以先声明后赋值,但是在使用之前必须赋值,而且一旦赋值则不能修改
public class Test {
public static void main(String[] args) {
AA ss = new AA();
//针对final类型的形参可以传递不同的数据
ss.cc(1);
ss.dd(100);
}
}
class AA {
public void cc(int k) {
final String num; //先声明后赋值
num = "ss";
// num ="ddd"; 语法报错
System.out.println(num);
}
public void dd(final int k) { //这里表明k这个值只能在调用时传入数据,在方法内部不允许修改
System.out.println(k);
}
}
修饰方法
不允许继承修改
class AA {
public void cc() {
System.out.println("AA..cc");
}
public final void pp() {
System.out.println("AA..PP");
}
}
class BB extends AA {
public void cc() {
System.out.println("BB..CC");
}
// public void pp() {} 语法错误,不允许继承
}
final属性上可以声明的同时进行赋值,也可以在构造器或者非静态代码块中进行赋值。一旦赋值不允许修改
final局部变量可以在声明的同时机型赋值,也可以在第一次使用之前进行赋值。一旦赋值不允许修改
final针对复杂类型表示的是不允许修改引用,而不是不允许修改引用对象中的属性