Java中是否可以继承String类,为什么
来源:互联网 发布:坦赞铁路 知乎 编辑:程序博客网 时间:2024/06/04 18:30
详细解析:
1. 关于final修饰符
参考文章:
浅析Java中的final关键字
根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。(这点有待商榷,《Java编程思想》中对于这点存疑)
下面这段话摘自《Java编程思想》第四版第143页:
“使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。“
2. 关于String类
参考文章:
Java中的堆、栈和常量池
Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)
什么是字符串常量池?
Java中的String为什么是不可变的? – String源码分析
关于String类,要了解常量池的概念
String s = new String(“xyz”); //创建了几个对象
答案: 1个或2个, 如果”xyz”已经存在于常量池中,则只在堆中创建”xyz”对象的一个拷贝,否则还要在常量池中在创建一份
String s = "a"+"b"+"c"+"d"; //创建了几个对象
答案: 这个和JVM实现有关, 如果常量池为空,可能是1个也可能是7个等
3. 相关类: StringBuffer, StringBuilder
参考文章:
String,StringBuffer与StringBuilder的区别
String StringBuilder StringBuffer 对比 总结得非常好
从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
String为immutable, 不可更改的,每次String对象做累加时都会创建StringBuilder对象, 效率低下。
// 程序编译期即加载完成对象s1为"ab",JVM自有优化, 效率并不差String s1 = "a" + "b";
// 这种方式,JVM会先创建一个StringBuilder,然后通过其append方法完成累加操作,比较耗资源// 所以在循环中做字符串累加赋值时应当使用StringBuilder或StringBuffer类String s1 = "a";String s2 = "b"; String s3 = s1 + s2; // 等效于 String s3 = (new StringBuilder(s1)).append(s2).toString();
StringBuffer是线程安全的
StringBuilder(5.0版本后添加的类,是StringBuffer的一个简单替换)为非线程安全的,但是效率会好些,在单线程环境中要做大量字符串累加时推荐使用该类
- Java中是否可以继承String类,为什么
- 是否可以继承String类
- String类是否可以继承?
- String类是否可以继承
- String类是否可以被继承?
- JAVA中子类是否可以可以继承、重写父类的静态方法--总结
- string类为什么不能不继承
- JAVA静态方法是否可以被继承?
- Java中类不能多重继承,接口可以多重继承
- JavaScript中为什么string可以拥有方法?
- 抽象类是否可以继承实体?可以继承
- Java中子类是否可以继承父类的static变量和方法而呈现多态特性
- Java中子类是否可以继承父类的static变量和方法而呈现多态特性
- java中的接口为什么可以多继承,而其他类则不能实现多继承
- 为什么Java语言中,类与类之间只能单根继承,类与接口可以多重实现,接口与接口却多根继承
- [Java]static、final修饰的方法是否可以被子类继承、是否可以被子类重写及final修饰详解
- Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?【Java面试题】
- 抽象类是否可以继承实体类
- 开源软件成熟度评测报告-分布式消息中间件
- Spring Boot
- java线程
- Junit加载Spring容器作单元测试_添加事务回滚
- Linux下的 command not found错误(解决方法)
- Java中是否可以继承String类,为什么
- 信息系统项目管理师--通过
- android屏幕适配
- 程序员大约多少岁就失业(你准备好失业了吗)
- C 语言 sizeof() 运算符
- python---项目2-查找服务器是否开启ftp的21端口,socket,os,sys,端口识别,文件操作
- 关于使用JAXB的时候生成的XML文件用记事本打开不换行的解决方法
- 代理模式和代理模式
- mysql case用法