final
1.关于属性
用final修饰的属性必须赋值,要么直接赋值,要么构造方法里赋值
例 :
如上图,变量c没有赋值所以会报错,而b在构造方法里赋值,d一开始就进行了初始化
另外,我们一旦进行了初始化就无法再去更改这个变量的值
例:
我们去给d变量赋值,这样会报错
小tips : 我们一般使用 static + final 组合来表示这个变量在初始化后不可变而且在内存中只有一份 例 : static final double pi =3.14
2. 关于方法
用final修饰的方法不能被重写
例:
如上图,我们用鸵鸟类继承鸟类,是无法去重写鸟类里被final修饰的方法的
小tips : 我们可以在方法的参数上加上final,防止参数在方法体内被修改
例:
3.关于类
用final修饰的类不能被继承
如果想使用final来修饰类,类也不能被定义为抽象类和接口,用final修饰的类表示我们的这个类不需要任何的扩展,但抽象类和接口是肯定要被扩展的,所以我们不能用final去修饰它们
例 :
如图,我们是无法去继承一个用final修饰的类
我们可以去继承String类吗? 答案显然是不能,这正是因为源码中String类被final修饰
如上图,jdk中源码将String类用了final修饰
4.关于引用类型
public class Demo {
String str = "qwer";
public static void main(String[] args) {
final Demo demo = new Demo();
demo.str = "qqq";
}
}
以上的demo是引用类型,这里使用final表示这个引用变量是不可变的,意思就是我们无法继续使用这个引用变量来指向一个新的对象,但这并不妨碍我们去修改这个对象的值
我们知道,引用变量的值是它指向的地址,也就是说这个地址是不可变的,但是我们是可以去修改指向对象的值的,所以这里final的修饰和我们new的对象是没有太大关系的
5. final 和 static
这两个关键字我们一定要区分好
final一般表示 : 不可变的
static一般表示 : 只有一份
关于static的使用可以参考 :static关键字的用法_xx12321q的博客-CSDN博客