深挖——final
final的含义
最终的,它是一个修饰符
可以修饰的成员
A、外部类
final修饰的外部类叫做太监类,不能被子类所继承
public final class FinalDemo {
}
B、成员变量/局部变量
当变量一旦被final修饰之后,它的值是固定不变的,不能更改
不能更改是指不能通过调用再赋值去改变给的初始值,切勿直接源码中这句代码直接改值 static String name = “球1xxx”
C、方法
final修饰的方法,不能被子类重写【注意:static修饰的方法也一样】
对于final修饰的成员如何调用?
如果用了static修饰的,直接类名点去调用,没有static修饰的,直接对象点去调用
特殊情景
public class FinalDemo {
public String name;
public int money;
public FinalDemo() {
}
public FinalDemo(String name, int money) {
this.name = name;
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
@Override
public String toString() {
return "FinalDemo{" +
"name='" + name + '\'' +
", money=" + money +
'}';
}
}
调用上面类
疑问:如上为什么用final修饰的实例化对象之后,还能修改后面赋予的值,并且还能打印出来呢?
上面而言,这里没有编译错误的原因是final修饰的是 aa 这个变量,只有aa这个变量的值发生改变的时候,它才会报错,如下:
final常用场景
修饰成员变量,如果一个成员变量被final修饰了,该变量一般都会和public static一起使用,就会成接口中定义全局常量那样,命名全大写