下面三条是关于final的用法比较笼统的说法,即使背到脑子里,看的只是带着面纱的final。我希望下面的内容可以解开这层面纱。
- final可以修饰变量,被final修饰的变量被赋值之后,不能对它重新赋值;
- final可以修饰方法,被final修饰的方法不能被重写;
- final可以修饰类,别final修饰的类不能被派生子类。
1. final修饰变量
Java程序不能为final修饰的变量执行默认的初始化,必须显示的初始化。
实例变量指定初始值的三个地方:
本质上都是在构造器里面
类变量指定初始值的两个地方:
执行“宏替换”变量
对于一个final变量(类变量,实例变量,局部变量),在定义该变量时指定了初始值,且该初始值可以在编译时就确定下来,那么这个final变量本质上已经不再是变量,而是相当与一个直接量。
- 直接量
- 表达式(基本运算表达式或字符串连接运算,没有访问普通变量,调用方法)
2. final修饰的方法不能被重写
子类访问不到父类中的某个方法时,在子类中可以写一个和父类的该方法同名的方法。
例如:父类中的方法使用private修饰
3. 内部类中的局部变量
java要求所有被内部类访问的局部变量都使用final修饰。