详细解析:

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类,为什么相关推荐

  1. java中接口可不可以继承一般类,为什么?

    不可以因为接口中只能出现3种成员 1.公共的静态常量(public final static ) 2.公共的抽象方法(public abstract ) 3.静态内部类(static class) 而 ...

  2. java stringbuffer数组_Java中字符数组、String类、StringBuffer三者之间相互转换

    一.StringBuffer与String的相互转换 1.将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型. StringB ...

  3. java 为什么有匿名类_全面了解Java中的内部类和匿名类

    Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了 ...

  4. java中如何实现继承_Java继承

    Java继承 1.什么是继承呢? 类似人类中的继承(继承上一辈.上上辈的东西),在Java中就是将一个已知的类进行拓展,让一个新的类来继承这个已知的类,这样就能使这个新的类具有已知类的属性和行为. 新 ...

  5. java编程之线程,继承Thread类,匿名内部类的写法

    package ThreadTest; //java编程之线程,继承Thread类,匿名内部类的写法 public class Test3 {public static void main(Strin ...

  6. java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing

    java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...

  7. java面试题27 java中下面哪些是Object类的方法()

    java面试题27 java中下面哪些是Object类的方法() A notify() B notifyAll() C sleep() D wait() 蒙蔽树上蒙蔽果,蒙蔽树下你和我.遇到这种题,我 ...

  8. java中接口可以继承接口吗?

    java中接口可以继承接口吗? java中不允许类多重继承的主要原因是:如果A同时继承B和C,而假如B和C同时有一个d方法,A如何决定该继承哪一个呢? 但接口不存在这样的问题,接口中全都是抽象方法,继 ...

  9. JAVA中同目录下定义类,以及对象的创建与使用,内存图的原理

    JAVA中同目录下定义类,以及对象的创建与使用(听课笔记) JAVA中对象的创建与使用(听课笔记) 示例一 同文件目录下,创建了三个类OOTest01,User,Address类,之间的调用 示例二 ...

最新文章

  1. SAP MM 物料主数据采购视图中的字段'Var. OUn'的作用?
  2. vue在created调用点击方法_vue中created、mounted等方法整理
  3. 【Caffe实践】基于Caffe的人脸检测实现
  4. 《C语言编程初学者指南》一1.9 本章小结
  5. Android之面试题总结加强版(一)
  6. 2019-02-25-算法-进化
  7. 论文浅尝 | 六篇2020年知识图谱预训练论文综述
  8. Linux vsftpd(ftp)安装包安装方法
  9. 女子将车垂直开上标志杆,警方回应...
  10. 计算机程序的思维逻辑 (47) - 堆和PriorityQueue的应用
  11. 关于稀疏矩阵转化为稠密矩阵问题 (scipy.sparse格式和tensor稀疏张量格式)
  12. 深入理解Webpack核心模块Tapable钩子[同步版]
  13. 物化视图(materialized view) 实现数据迁移、数据定时同步
  14. android服务之service(其二)关于aidl进程间通信,Android初级教程进程间的通信AIDL
  15. JavaWeb Tomcat原理理解
  16. 360浏览器打开Axure
  17. 飞鱼CRM如何同步数据到第三方系统
  18. 语言学句法分析树形图怎么画_科学网—《泥沙龙笔记:漫谈自动句法分析和树形图表达》 - 李维的博文...
  19. 国潮正当时,把优秀传统文化融入时代脉搏
  20. 重装系统电脑黑屏开不了机如何处理

热门文章

  1. 斯洛文尼亚接受BCH支付的商家达343家,日本和北昆士兰州对BCH接受度增长迅速
  2. 澳洲中本聪Craig Wright涉嫌论文抄袭?
  3. GNU make manual 翻译( 一百一十)
  4. zabbix3.2监控centos6网卡流量
  5. IDC报告称经济衰退将促进云计算发展
  6. VIEWGOOD流媒体平台推进广州图书馆数字化进程
  7. Unity3D中暂停时的动画及粒子效果实现
  8. RabbitMQ启动参数具体含义
  9. java VM 推荐的命令行设置
  10. 数据绑定设计器的使用