java基础4:深入理解final关键字
本文主要介绍了final关键字的使用方法及原理
具体代码在我的GitHub中可以找到
https://github.com/h3pl/MyTech
文章首发于我的个人博客:
https://h3pl.github.io/2018/04/23/javase4
final关键字可以修饰类、方法和引用。
修饰类,该类不能被继承。并且这个类的对象在堆中分配内存后地址不可变。
修饰方法,方法不能被子类重写。
修饰引用,引用无法改变,对于基本类型,无法修改值,对于引用,虽然不能修改地址值,但是可以对指向对象的内部进行修改。
比如char[0] = 'a'。不改变对象内存地址,只改变了值。
具体看一下下面的栗子:
final class Fi { int a; final int b = 0; Integer s;
}classSi{//一般情况下final修饰的变量一定要被初始化。//只有下面这种情况例外,要求该变量必须在构造方法中被初始化。//并且不能有空参数的构造方法。//这样就可以让每个实例都有一个不同的变量,并且这个变量在每个实例中只会被初始化一次//于是这个变量在单个实例里就是常量了。finalints;Si(ints){this.s=s;}}classBi{finalinta=1;finalvoidgo(){//final修饰方法无法被继承}}classCiextendsBi{finalinta=1;//voidgo(){////final修饰方法无法被继承//}}finalchar[]a={'a'};finalint[]b={1};final修饰类
@Testpublicvoidfinal修饰类(){//引用没有被final修饰,所以是可变的。//final只修饰了Fi类型,即Fi实例化的对象在堆中内存地址是不可变的。//虽然内存地址不可变,但是可以对内部的数据做改变。Fif=newFi();f.a=1;System.out.println(f);f.a=2;System.out.println(f);//改变实例中的值并不改变内存地址。Fiff=f;//让引用指向新的Fi对象,原来的f对象由新的引用ff持有。//引用的指向改变也不会改变原来对象的地址f=newFi();System.out.println(f);System.out.println(ff);}final修饰方法
@Testpublicvoidfinal修饰方法(){Bibi=newBi();bi.go();//该方法无法被子类Ci重写}final修饰基本数据类型变量和引用
@Testpublicvoidfinal修饰基本类型变量和引用(){finalinta=1;finalint[]b={1};finalint[]c={1};//b=c;报错b[0]=1;finalStringaa="a";finalFif=newFi();//aa="b";报错//f=null;//报错f.a=1;}
关于字符串的内容可以在上一节查看:
https://blog.csdn.net/a724888/article/details/80042298
关于抽象类和接口的内容可以在下一节查看:
https://blog.csdn.net/a724888/article/details/80061047
更多内容请关注微信公众号【Java技术江湖】
这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!(关注公众号后回复”资料“即可领取 3T 免费技术学习资源以及我我原创的程序员校招指南、Java学习指南等资源)
**
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。