final的意思是指不可改变的,不可改变主要是出于设计或效率考虑
final可以用来修饰:数据、方法、类
一、修饰数据
1、修饰数据,就代表数据不能改变,数据不能改变,就必须在定义时进行初始化。
修饰数据也分为两种,一种是修饰基本类型,另一种是修饰对象引用(数组也一样,数组也是特殊的对象)
基本类型就不用说了,就是不能改变,而修饰对象是指不能把这个对象引用再指向别的对象了,而对象本身是可以改变的。
比如:final A a=new A();
a=new A();//错误
a.setXX(xxx);//正确
2、空白final,所谓的空白final是指在声明final数据时,并没有进行初始化。
但必须在域的定义处或构造函数中进行初始化
3、修饰参数,说明这个参数在方法体中不能改变或更改对象引用指向。
二、修饰方法
主要是把方法锁定,以防止任何继承类修改它的含义。不能覆盖
private和final
在类中private修饰的方法,隐含为final类型。在一个类中,如果一个方法被指定为private,在子类中有一个完全一样的方法,这也不是覆盖。
因为我们知道,private修饰的方法只不过是一些隐藏于类中的代码片段而已,子类中的方法和父类中的方法是两个完全不同的方法。如果你在子类中这个方法的上面添加@Override,则会提示报错信息。
而如果在一个类中,方法被指定为final,在子类中又有一个完全一样的方法,此时编辑器会提示final方法不能覆盖的错误。
三、修饰类
final修饰类,说明你不想让别人继承你的类,不希望它有子类。此时所有的行为也是final类型的
final可以用来修饰:数据、方法、类
一、修饰数据
1、修饰数据,就代表数据不能改变,数据不能改变,就必须在定义时进行初始化。
修饰数据也分为两种,一种是修饰基本类型,另一种是修饰对象引用(数组也一样,数组也是特殊的对象)
基本类型就不用说了,就是不能改变,而修饰对象是指不能把这个对象引用再指向别的对象了,而对象本身是可以改变的。
比如:final A a=new A();
a=new A();//错误
a.setXX(xxx);//正确
2、空白final,所谓的空白final是指在声明final数据时,并没有进行初始化。
但必须在域的定义处或构造函数中进行初始化
3、修饰参数,说明这个参数在方法体中不能改变或更改对象引用指向。
二、修饰方法
主要是把方法锁定,以防止任何继承类修改它的含义。不能覆盖
private和final
在类中private修饰的方法,隐含为final类型。在一个类中,如果一个方法被指定为private,在子类中有一个完全一样的方法,这也不是覆盖。
因为我们知道,private修饰的方法只不过是一些隐藏于类中的代码片段而已,子类中的方法和父类中的方法是两个完全不同的方法。如果你在子类中这个方法的上面添加@Override,则会提示报错信息。
而如果在一个类中,方法被指定为final,在子类中又有一个完全一样的方法,此时编辑器会提示final方法不能覆盖的错误。
三、修饰类
final修饰类,说明你不想让别人继承你的类,不希望它有子类。此时所有的行为也是final类型的