字符串
使用+连接字符串
- 使用+连接字符串每次都会构建一个新的对象,在需要频繁拼接字符串的场景时,会比较耗时和浪费空间,因为String创建后就不可以再改变,因此+ 操作是线程安全的
StringBuilder
- 该类可以解决String拼接字符串时出现的问题,但是StringBuilder线程不安全。
StringBuffer
- StringBuilder可以保证线程安全,但是也因此效率变得低
总结
- 如果只需要简单的拼接字符串的话,可以直接使用+号拼接
- 如果需要频繁拼接而且无需考虑线程安全的,可以使用StringBuilder
- 如果需要频繁拼接但要考虑到线程安全的话,可以使用StringBuffer
对象与克隆
浅拷贝
- 只能对类中的基本数据进行拷贝,类中的对象还是引用原对象
深拷贝
- 通过重写clone使得类中的子对象也能进行克隆
- 深拷贝步骤:
- 实现Cloneable接口(该接口只是拷贝的标记接口)
- 使用public访问修饰符重新定义clone方法
异常分类
Throwable
- 异常对象都派生于Throwable类
- Throwable分为Error和Exception
Error
- Error层次结构描述了java运行时系统内部错误和资源耗尽错误,这种情况很少出现
Exception
- Exception派生出两个分支,一个是RuntimeException,另外一个是其他异常
- 划分规则:由程序导致的是RuntimeExeption;而程序本身没有问题,但由像I/O错误这类问题导致的异常属于其他异常
异常规范
- java语言规范:将派生于Error或者RuntimeException类的所有异常称为未检查异常,所有其他异常称为已检查异常。
final关键字
- final通常指的是不可改变的, 不想改变的原因往往出于两种原因:设计和效率
- final可能使用到的情况:数据、方法和类
final数据
- 一个既是static又是final的数据只占一段不能改变的内存空间,如果final定义的变量是引用类型的话,表明该引用一定被初始化指向一个对象后,就不能再更改引用,但是可以对象自身是可以被修改的
final参数
- 当参数被声明为final时,意味着你不能修改其值,只能读取,这一特性主要用来向匿名内部类传递数据
final方法
- 使用final方法有两个原因:
- 把方法锁定,以防止任何继承类来修改它的含义,这是处于设计的考虑
- 出于效率的考虑(由于虚拟机的优化,通常已经不需要final来进行优化)
final和private关键字
- 类中所有private方法都隐式地指定为final。由于无法取用private,也就无法覆盖它
final类
- 当一个类被定义为final时,就表明你不打算继承该类了,这是出于设计或者安全的考虑
参考资料:java核心技术,java编程思想