final修饰变量
final修饰变量时,一旦变量被赋了初始值,则该变量的值不能再改变。
1.final修饰类变量
类变量是随类初始化而初始化的,虚拟机加载类时,会为类变量分配内存空间,并分配默认值(0,‘\u0000’,false ,null)。这里的默认值是系统默认分配的,并没有真正赋初始值,除非开发者没有指定初始值。
对类变量赋初始值,可以在静态代码块中赋值,或者在定义类变量的时候赋值,但不能同时在两个地方赋值。以下代码错误,类变量被赋值两次,编译出错:
public class People{
static final int age=1;
static{
age=2;
}
}
2.final修饰成员变量
final修饰成员变量,可以在声明该成员变量时、初始代码块中、构造方法中赋值,但是不能同时在两个或三个中赋值。
虚拟机不会为final修饰的成员变量初始化,需要开发者显示地去赋值。以下代码报错,系统试图访问未初始化的final成员变量:
public class People{
final int age;
static{
System.out.println(age);
age=1;
}
}
3.final修饰局部变量
final不会为局部变量赋初始值,必须由开发者显示指定初始值。
final修饰方法的形参时,不能在方法体内赋值,因为调用方法时,系统会根据传入的实参来赋值,以下程序报错:
public class People{
public void show( final int age){
age=1;
}
}
4.final修饰基本类型变量和引用类型变量
final修饰基本类型变量时,不能重新赋值,但修饰引用变量时,引用变量不能改变,但引用变量指向的对象可以改变。
5.final方法
final方法不能被子类重写
6.final类
final类不能被继承