final关键字的使用场景
final关键字可以修饰类、方法和变量;
final修饰变量:
表示该变量一旦获得初始值之后便不能被改变;final可以修饰成员变量(包括类变量和实例变量)也可以修饰局部变量,形参;(final修饰的变量不能被重新赋值是错误的,严格的说法是,final修饰的变量不能被改变)
与其他成员变量不同的是,final修饰的成员变量(包括实例属性和类属性) 必须由程序员显示初始化,系统不会对final变量进行隐式初始化; 当如果需要在初始化代码块 构造器中对final变量进行初始化,则不要在初始化之前就访问成员变量的值;
final修饰局部变量
系统不会对final修饰的局部变量进行初始化,必须进行显示的初始化,所以,final修饰的成员变量可以进行一次的赋值,不能进行重复的赋值;
final修饰的形参:
因为在系统调用该方法时,系统根据传入的参数来完成初始化,所以使用final修饰的形参不能被重新赋值;
final修饰的基本类型与引用类型
当final修饰基本类型变量时,不能被重新赋值,所以基本数据类型不能被改变;
但对于引用类型变量来说,保存的仅仅是一个引用,final只能保证这个引用的地址不能被改变,即一直引用同一个对象,但这个对象完全可以改变;
final修饰的方法
final修饰的方法不能被重写,所以不希望子类重写父类的某个方法,可以使用final修饰该方法;
如果使用final修饰一个带有private修饰符的方法,那么依然可以在子类中定义与该方法具有相同方法名 相同返回值 相同形参列表的方法;
final修饰的方法只是不能被重写,但可以被重载;
final修饰的类不能有子类,为了保证某个类不能被继承,可以使用final修饰起来;
final关键字的具体使用
继承关系的最大弊端就是破坏封装;子类可以访问父类的实现细节,而且可以通过方法的覆盖的形式修改实现细节;
final本身的含义为“最终的,不可变的”;可以修饰类、方法、变量;构造器不能使用final修饰;
final修饰的类:表示最终的类,不能再有子类;
final修饰的类需要满足以下条件:
1):某类不是专门为继承设计的
2):处于安全考虑,类的实现细节不许变动
3):确信该类不会被拓展
final修饰的方法:称为最终方法,该方法不能被子类覆盖;
什么时候使用final修饰方法:
1):在父类中提供的统一算法,不准子类通过方法覆盖来修改,此时使用final修饰;
2):在构造器中调用的方法(初始化方法),此时一般使用final修饰;
(final修饰的方法,子类可以调用,但不可覆盖)
final修饰的变量:最终的变量,表示常量;该变量只能赋值一次,不能再赋值;
final是唯一可以修饰局部变量的修饰符;
1):final变量必须显示的指定初始值,因为系统不会为final字段初始化;
2):final变量一旦赋初始值,就不能重新赋值;
3):常量命名规范:单词全部使用大写字母,如果是多个单词组成,单词之间使用下划线隔开;
final修饰的引用类型变量表示的是该对象的引用地址不能改变,但是里面的内容可以改变;
网友评论