final的作用以及String为什么不可变

1. final修饰类

final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。

2. final修饰方法

如果一个类不允许其子类覆盖某个方法(即不允许被子类重写),则可以把这个方法声明为final方法。
使用final方法的原因有二:

把方法锁定,防止任何继承类修改它的意义和实现。
高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

3. final修饰变量(常量)

如果是引用类型,地址不可以改变,其引用的属性值可以改变。如果是基本类型,其值不可改变
另外,通过final修饰,但却没有进行初始化,必须在构造方法中进行初始化,并且只能出现一个构造方法。这叫 空白final
但是,final空白在final关键字final的使用上提供了更大的灵活性,
为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。

补充:final参数
当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。

String为什么不可变?

final的作用以及String为什么不可变

  1. 我们通过源码可以看到存储String数据的char数组被final修饰,这也意味着一个String对象里的char数组不可能再指向一个新的数组!
  2. 并且String内部没有修改char数组的方法。
  3. String类用final修饰,不可以被继承从而不能通过子类修改。
上一篇:枚举类


下一篇:Java final用法