java-final关键字

来源:互联网 发布:凤岗淘宝摄影 编辑:程序博客网 时间:2024/06/05 17:52

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):

创建该例的实例后,实例变量都是不可变的;

0 0
原创粉丝点击