一、fianl的定义
fianl表示最终的,不可变的fianl可以修饰变量以及方法,还有类等
二、fianl修饰变量
-
fianl修饰的变量无法二次赋值
class A{ final int a = 0; a=100;//报错 }
-
当final修饰的变量是“引用”时重点:fianl修饰的变量无法二次赋值,引用是一个变量,所以被fianl修饰时也不能二次赋值!
2.fianl修饰实例变量final修饰的实例变量,系统不管赋默认值,要求自己手动赋值!!!
class A{
final int age;//报错The blank final field age may not have been initialized未被初始化
}
只要在系统赋默认值之前赋值就不会报错,因为只有在构造方法执行后才初始化实例变量,所以可以在构造方法体内赋值
public class test {
final int age;
test(){
age=23;
}
}
实例变量既然使用final修饰,说明该实例变量不会随着对象的改变而改变该实例变量前应该加:static关键字,变为静态的,存储在方法区,节省内存空间
public class test {
public static void main(String[] args) {
Chinese chinese = new Chinese();
System.out.println(Chinese.Country);
}
}
class Chinese{
static final String Country = "中国";
}
//输出:中国
常量和静态变量的区别:常量的值不能变!但两者都是存储在方法区,并且是在类加载时初始化!结论:static final联合修饰的变量称为“常量”, 常量名建议全部大写,每个单词之间用下划线衔接。
三、final修饰方法
final修饰的方法无法覆盖(重写)
public class test {
public final void dosome() {
}
}
class Chinese extends test{
public void dosome() {//报错Cannot override the final method from test无法从测试中覆盖最终方法
}
}
四、final修饰类
B类继承A类,相当于对A类的功能进行扩展,如果不想别人对A类进行扩展可以使用final关键字修饰A类,这样A类就无法继承了
public final class test {
}
class Chinese extends test{//报错The type Chinese cannot subclass the final class test无法继承
}
五、final关键字总结:
-
fianl表示最终的,不可变的
-
fianl修饰的变量无法二次赋值
-
fianl修饰的引用一旦指向某个对象,则不能再重新指向其他对象,但该引用指向的对象内部的数据可以修改
-
fianl修饰的实例变量必须手动初始化,不能采用系统默认值;final修饰的实例变量一般和static联合使用,称为常量
-
final修饰的方法无法覆盖(重写)
-
final修饰的类无法被继承