温故而知新,可以为师矣。
初中的时候对这句话的理解,就是课文最后的那一句“并背诵全文”。
现在想想,真的很有道理的一句话。当初大2学JAVA的时候很浮躁,对final理解的也不深,最近用到了,也查了一些资料,又从中收获了很多原来不知道得东西。
final成员变量
final成员变量一旦被赋予初始值之后就不可更改。final成员变量不会初始化,需要程序员自己进行初始化。我们可以在初始化块中或构造函数中对final成员变量进行初始化,不可以在普通方法中对final成员变量进行初始化。
普通的成员变量,没有指定初始值的时候,会被系统赋值,但是final成员不会被赋值。
final局部变量
和final成员变量一样,只可以被初始化赋值一次,赋值后不可更改。
final引用变量
final只能保证对于引用变量的地址保持不变,对于引用变量内部的成员变量,可以进行修改。也就是final只指向一个引用变量的地址,这个不变,其他的没关系。
final方法
通过使用final修饰方法,使其不可以被子类重写。它不能被重写,但是可以被重载。
final类
不可以被继承的类,继承final类会引起编译错误。
不可变类
不可变类(immutable)指的是该类创建完实例后,该实例的成员变量不会改变。JAVA的8个包装类和String都是不可变类。
我们使用private final 来修饰不可变类的成员变量。提供带参数的构造函数为不可变量设置初始值。不提供set方法。
有一点需要注意,当我们的成员变量中含有final引用变量的时候,我们必须保护好初始化这个引用变量的过程,使外界修改引用变量的成员变量的值,我们的引用变量也不会改变。否则该不可变类就不是一个不可变类。听起来很麻烦,因为现在没用到,如果找到好的例子,会第一时间给大家解读。