Java Base#

1. String, StringBuffer, StringBuilder#

  • String

String类是final类型的,不能被继承,创建之后其值不能被修改(可以使用字符串操作类StringBuffer和StringBuilder类修改字符串)。

String str = "abc"; // 字符串abc在常量区

String str = new String("abc"); //字符串在堆中
  • StringBuffer

StringBuffer是final类型的,不能被继承。

StringBuffer是线程安全的,其大多数方法都有同步处理。

StringBuffer的toString方法会对String对象进行缓存,以减少元素复制开销。

  • StringBuilder

StringBuilder可被继承。

StringBuilder非线程安全,toString方法也没有对String对象进行缓存。

其他的基本和StringBuffer一样。

2. .class文件是如何被加载的#

3. ArrayList, LinkedList,Vector#

  • ArrayList

ArrayList的底层是数组实现的,所以获取元素的时候可以通过下标直接获取,时间复杂度是O(1),但是对元素的操作比较麻烦,比如删除操作需要移动数组的元素

非线程安全的(可以使用Vector,Vector是线程安全的)

  • LinkedList

LinkedList的底层是链表实现的,查找费时,时间复杂度是O(n),插入和删除比较高效

非线程安全的

相比于ArrayList,LinkedList占用更多的内存空间

    1. final finally finalize
  • final

用于声明属性,方法和类,表示属性不可以被修改,方法不可以被覆盖,类不能被继承

  • finally

是异常处理语句的一部分,表示总是执行

  • finalize()方法

GC将对象从内存清楚之前,调用此方法做必要的清理工作。

但是并不保证finalize方法能被及时的调用(垃圾回收的时机并不确定),也不保证finalize方法一定会被执行(程勋可能不会触发GC)

一般是用于释放非java资源(文件,native方法(malloc)等)

Vector Hashtable

    1. java反射

*