JavaBase
java基础
一、数据类型
- 八种基本类型
| 字节数(bit) | 取值范围 | 默认值 | |
|---|---|---|---|
| byte | 1 | -2^7~2^7-1 | 0 |
| boolean | 1 | 只有false和true | false |
| short | 2 | -2^15~2^15-1 | 0 |
| char | 2 | -2^15~2^15-1 | "\u0000" |
| int | 4 | -2^31~2^31-1 | 0 |
| float | 4 | -3.403E38~3.408E38 | 0f |
| double | 8 | -1.798E308~1.798E308 | 0.0 |
| long | 8 | -2^63~2^63-1 | 0L |
- String
String内部被标记为final
@Stable
private final byte[] value;
不可变的好处:
- String的hash值经常被使用,String不可变使得hash值也不变,只需要进行一次hash运算
- String经常作为参数,String不可变使其参数更安全
- 线程安全
- String Pool引用更快
-
StringBuilder与StringBuffer
StringBuilder速度快 ,StringBuffer线程安全
-
Object
二、面向对象
-
继承
- 子类拥有父类非 private 的属性、方法。
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
- Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
- 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
-
初始化顺序
- 父类(静态变量、静态语句块)
- 子类(静态变量、静态语句块)
- 父类(实例变量、普通语句块)
- 父类(构造函数)
- 子类(实例变量、普通语句块)
- 子类(构造函数)
java容器
ArrayList和LinkedList
大多数情况下使用的都是ArrayList,因为ArrayList支持随机访问,在get(index)的时候ArrayList更快
ArrayList扩容
1.8之前:数组+链表 拉链法
1.8之后:数组+链表+红黑树 红黑树用于处理hash值相同的链表长度超过8的时候(如果链表长度小于64,会优先扩容链表)TREEIFY_THRESHOLD>8时进行链表树化(也就是Node<K,V>的链表长度大于8时,Node< K,V>转化为红黑树),由链表转化为红黑树,注意到当Node<K,V>[] table的长度小于64时是不会进行树化的,以避免调整大小和树化阈值之间发生冲突