一、什么是 final 关键字
final 字面意思是:不可变的,不可更改的;
所以从字面代入进 java 中可以得到一个结论:final 关键字在进行修饰 java 程序时也不会变成不可更改的状态,但是值得注意的是,final 关键字在修饰不同的 java 程序会得到什么样的结果呢?
二、final 关键字的用法
1、fianl 关键字是否可以修饰基本数据类型,如果可以,那么被修饰的变量有哪些改变?
可以,被 fianl 关键字所修饰的基本数据类型会变为不可更改状态,无法重新赋值,所以这里就引申出了一个重要的点: 在进行定义一个被 final 修饰的变量时要对其直接手动初始化赋值,如果没有这样操作,其后果是系统自动初始化,定义的变量变为一个垃圾值;
1 public class Test33 { 2 3 final int y = 1; // 手动初始化赋值,赋值后的变量无法更改 4 5 public static void main(String[] args) { 6 7 final int x = 2; 8 System.out.println(x); 9 // x = 3; // 出现错误,x 值不允许重新赋值 10 } 11 }
2、fianl 关键字是否可以修饰普通方法和构造方法,如果可以,那么被修饰的方法有哪些改变?
final 关键字只能修饰普通方法,无法修饰构造方法,但可以修饰构造方法中的变量。其内容可以重新赋值;而构造方法中被修饰的变量是无法被更改的。
1 public class Test33 { 2 3 public static void main(String[] args) { 4 5 Test33 t = new Test33(1); 6 t.fun(); // 被 final 修饰过的普通方法,其内部的值可以被改变(string 和 包装类除外) 7 } 8 9 final public void fun () { 10 int i = 1; 11 // System.out.println(i); 12 i = 2; 13 System.out.println(i); 14 } 15 public Test33(final int a){ 16 int i = a; 17 // a = 3; 错误,无法重新再赋值,final 可以修饰构造方法内的变量,且修饰后无法更改 18 System.out.println(i); 19 } 20 }
3、final 关键字与 static 关键字的融合:
final 与 static 两者同时修饰一个基本数据类型变量,其结果是这个变量变成常量,而且这个常量的标识符一定要大写且两个单词之间要加_;
格式:final static int Max_i = 1;
4、final 关键字是否可以修饰引用数据类型,如果可以,那么被修饰的引用数据类型会发生什么改变?
final 可以修饰引用数据类型,但是修饰后的引用数据类型其地址无法在更改,但其内容可以重新赋值。
5、final 关键字是否可以修饰类,如果可以,那么被修饰的类会发生什么改变?
可以,被 final 修饰的类可以继承其他类,但其本身无法被其他类继承,也就是说被 final 修饰的类只能作父类,无法作子类