1.final 可修饰类;变量;方法;
修饰变量的时候,一旦给予了初始值,就不能再改变了; final既可以修饰类变量,也可以修饰实例变量,或者局部变量,形参;
所以,考虑到类在初始化的时候,类变量就被分配内存,如果不在这里给予初始值,就被系统默认分配初始值,那么定义的final变量也就没有意义了,因为在后面也不能改了嘛;
同时,实例变量,在类new对象的时候,会被系统分配内存,并被给予初始值,所以在这里也必须主动指定初始值;
所以,final修饰的成员变量必须显示的指定其初始值! 可以在声明的时候,构造器中,或者初始化代码块中指定其初始值;
2.final修饰基本类型和引用类型的区别:
final int i = 1; 和 final Person p = new Person();
我们说被final定义的变量,不能被二次赋值, 对于基本类型如i = 1;i本身就是代表1这个值,所以不能对其做出改变了;
然而p这个变量代表的是一个地址,new出来的Person的地址,那么 代表的是一个地址,这个地址自然不能被改变了;那么这个地址里存的值,肯定是可以改变的!
3.满足下列三个条件,final变量就不被系统认为是一个变量了,可以宏替换!认为是一个常量
a.使用final修饰符修饰;
b.定义final变量时就指定了初始值;
c.初始值可以在编译的时候就被确定下来;
4.final方法:
final修饰的方法不可以被重写,但是可以被重载;
如果父类有一个private方法,子类本来就无法访问这个方法,所以子类定义一个与该方法相同方法名,相同形参,相同返回值的方法,也不是重写,只是重新定义了一个新方法;
所以父类的这个private方法,用final修饰了,子类还是可以写一个相同的;
5.final类:
final修饰的类,终极类,不可以被继承;
6.不可变类(immutable):
创建该例的实例后,实例变量都是不可变的;