博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
String 类为什么是final
阅读量:5821 次
发布时间:2019-06-18

本文共 911 字,大约阅读时间需要 3 分钟。

hot3.png

一、什么是final

final 意思是“最终的,最后的”,我认为是不可变的,他可以修饰类,变量和方法。所以可以认为他所修饰的类,变量和方法都是不能改变的。

1.final修饰类

被final修饰的类不能被继承,即他不能拥有自己的子类,否则会报错。

首先 创建一个用fianl 修饰的父类Test

111504_AopJ_3359663.png

然后创建一个子类test 继承Test

111916_uk3j_3359663.png

点进去看一下报警信息,

112553_8nuE_3359663.png

意思是类test不能被final修饰的类Test。

2.final修饰方法

被final 修饰的方法不能被重写,但是:

重写的前提是子类可以从父类中继承此方法,所以当父类中被final修饰的方法的访问权限为private时,子类中就可以重写此方法。

(一)父类中方法控制权限为public

首先在父类中创建一个方法,并用final修饰

115723_L27K_3359663.png

然后在子类中中重写work方法,可以看到当子类重写父类中final修饰的方法是,报错了,报错信息如下:

115518_WEoK_3359663.png

即子类不能重写父类中被final修饰的方法

(二)父类中方法控制权限为private

final修饰的变量,无论是类属性,对象属性,形参还是局部变量,都需要进行初始化操作。

(1)修饰变量

121226_CQMe_3359663.png

可以看到被final修饰的变量报错了,是因为final修饰的字段fa没有被初始化,所以当变量被final修饰是要赋值初始化,当初始化之后就不会报错。

(2)修饰类属性

也是需要初始化的

二、String 类为什么是final

结合以上的基础知识,我们来分析一下为什String类是final的?

123502_tux7_3359663.png

这个例子标明,让一个普通类继承String类,结果发现报错了.

即Test不能是final类String的子类,这里已经很明显地看出String类是final的,但是到底是为啥子呢?

(1)由于String类不能被继承,所以就不会没修改,这就避险了因为继承引起的安全隐患

(2)String类在程序中出现的频率较高,为了避免安全隐患,它每次出现是都用final来修饰,这无疑会降低程序的执行效率,所以干脆直接将其设为final提高效率

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3359663/blog/1615317

你可能感兴趣的文章
使用membership(System.Web.Security)来进行角色与权限管理
查看>>
opticom 语音质量验证白皮书
查看>>
3D实时渲染中的BSP树和多边形剔除
查看>>
Frank Klemm's Dither and Noise Shaping Page: Dither and Noise Shaping In MPC/MP+
查看>>
网络抓包的部署和工具Wireshark【图书节选】
查看>>
Redis在Windows+linux平台下的安装配置
查看>>
Maven入门实战笔记-11节[6]
查看>>
几篇JavaEye的博客
查看>>
Local declaration of 'content' hides instance variable
查看>>
[zz] C++智能指针循环引用解决
查看>>
ASP.NET中 HTML标签总结及使用
查看>>
Spring 项目中把 SQL 语句写在 .sql 文件中
查看>>
Linux下日志系统的设计
查看>>
爬虫IP被禁的简单解决方法——切换UserAgent
查看>>
selenium + python 添加等待时间
查看>>
php生成word,并下载
查看>>
python 函数参数
查看>>
紫书 习题8-11 UVa 1615 (区间选点问题)
查看>>
asp.net mvc学习(Vs技巧与Httpcontext)
查看>>
float数据在内存中是怎么存储的
查看>>