final(最终的,不可变的)
修饰变量
final变量一旦初始化,则不允许修改
在构建对象时,final属性必须进行赋值,可采用的是直接赋值、非静态代码块赋值、构造器赋值三种方法,重点是一旦赋值不允许修改
例:
class A1 {
final String name = "kou"; // 指定final属性必须给出一个初始化,否则报错
final String name1;
final Integer age; // 初始化可以直接赋值,也可以在代码块中进行赋值或者在构造器中进
行赋值
final Date birth;
{ // 代码块,不管执行的是哪个构造器,这个代码块一定执行
age = 100;
}
public A1() {
birth = new Date();
name1="birth";
}
public A1(String name1) {
birth = new Date();
// age=99;语法报错的原因是非静态代码块中已经对age属性进行赋值,在构造器中赋值属于2
次赋值,所以报错
this.name1=name1; //final属性也可以通过构造器的参数进行赋值,不是必须为字面
量
}
public void pp() {
// name="zhangsan"; 报错的原因是final属性一旦赋值则不允许修改
}
}
局部变量要求声明的同时必须赋初始值,也可以先声明后赋值,但是在使用之前必须赋值,而且一旦赋值则不能修改
修饰方法:不允许继承修改
修改类定义:不允许继承
重要提示:
由于String、StringBuffer、StringBuilder之类的类型定义是final类型的,所以不允许通过继承的方式重新定义
总结
final属性上可以声明的同时进行赋值,也可以在构造器或者非静态代码块中进行赋值。一旦赋值不
允许修改
final局部变量可以在声明的同时机型赋值,也可以在第一次使用之前进行赋值。一旦赋值不允许修
改
final针对复杂类型表示的是不允许修改引用,而不是不允许修改引用对象中的属性
final方法表示这个方法不允许在子类中覆盖定义。子类中只能继承父类中的final方法,但是不允许
子类中重新定义
final类表示这个类不允许继承