修饰:表示类别不能继承
修饰方法:表示方法不能被子类覆盖,但可以重载
修改变量:表示变量一旦赋值,就不能改变其值。
a、变量修改成员
如果final修改类变量,则只能在静态初始化块中指定初始值或声明该类变量时指定初始值。
如果final修改了成员变量,则可以在非静态初始化块中执行初始值,声明变量或构造器。
b、修改局部变量
系统不会初始化局部变量,局部变量必须由程序员显示。因此,当使用final修改局部变量时,
也就是说,默认值可以在定义时指定(后面的代码不能再赋值变量),也不能指定默认值,但在后面的代码中
中对final变量赋初值(只有一次)
c、修改基本类型数据和引用类型数据
若为基本数据类型的变量,则其数值一旦初始化就不能改变;
如果是引用类型的变量,则在初始化后不能将其指向另一个对象。但引用值是可变的。
为什么局部内部类和匿名内部类只能访问局部final变量?
内部类和外部类处于同一水平,内部类不会随着方法的实施而被销毁,因为定义在方法中。
这里有一个问题:当外部方法结束时,局部变量将被销毁,但内部对象可能仍然存在(只有当没有人再次引用它时才会死亡)。这里有一个矛盾:内部对象访问了一个不存在的变量。
为了解决这个问题,将局部变量复制为内部变量,以便当局部变量死亡时,内部变量仍然可以访问,实际访问是局部变量。”copy"。这似乎延长了局部变量的生命周期。当局部变量被复制成内部变量时,必须确保这两个变量是相同的,即如果我们修改了内部变量,方法中的局部变量必须改变。如何解决这个问题?将局部变量设置为final。初始化后,我不会让你修改变量,以确保内部成员变量和方法的一致性。这实际上是一种妥协。使局部变量与内部类中建立的副本保持一致。