final可以修饰变量(实例变量 静态变量 局部变量)、方法、类
被final修饰的局部变量称为常量 只能进行一次赋值,不允许更改
注意:被final修饰的把变量通常以全大写的形势命名
final修饰的实例变量 jvm不在给予默认值
在定义时直接赋值 或在每一个构造方法内赋值
finla修饰的静态变量jvm不在给予默认值
在定义时直接赋值 可以在静态代码块中进行赋值
如果final修饰引用 则代表引用的首地址不能进行改变
final可以修饰方法 被final修饰的方法不能被修改 代表子类继承父类时 父类中被final修饰的方法可以继承不能被覆盖
final可以修饰类 被final修饰的类不能被继承
System、String、Math等一些工具类通常会定义为 final类。
例如class A extends CopyOnWriteArrayList{}这句话没见过Cory…这个类 就要分析 如果说他前面有final 那么他不能被继承 这个代码错误 如果没有final修饰那么可以继承 代码正确
总结三个修饰符
abstract 、static 、final 可以修饰哪些内容?
abstract: 可以修饰类、方法
static:可以修饰属性、方法、静态代码块
final:可以修饰 变量(局部变量、实例变量、静态变量)、方法、类
abstract 、static 、final 都不能用于修饰构造方法。
abstract:抽象方法只能有方法的声明,没有方法实现,实现部分让子类完成;但是构造方法是不能被子类继承,如果构造方法被
abstract修饰,则子类无法完成构造方法的实现内容。
static:被static修饰可以直接类名加属性名访问 构造方法用于创建对象 冲突
finla:被final修饰的构造方法是不能被覆盖 子类不身就不能继承父类的构造方 所以没有意义
private、abstract、static、final是否能联合修饰成员方法?
private abstract 不能同时使用被private修饰的不能被继承 而abstract修饰的方法子类必须覆盖所以冲突
static abstract 不能同时使用static修饰的方法可以直接用类名加方法名访问如果通过类名调用一个抽象方法jvm无法识别
final abstract 不能同时使用final修饰的方法不能被继承 abstract修饰的方法必须让子类覆盖完成实现部分
private、static、final可以组合使用。