java基础

字符串

使用+连接字符串

  • 使用+连接字符串每次都会构建一个新的对象,在需要频繁拼接字符串的场景时,会比较耗时和浪费空间,因为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编程思想

分享到