GitHub - coadfarmer/JavaBase

JavaBase

java基础

一、数据类型

  1. 八种基本类型
字节数(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
  1. String

String内部被标记为final

@Stable
private final byte[] value;

不可变的好处:

  • String的hash值经常被使用,String不可变使得hash值也不变,只需要进行一次hash运算
  • String经常作为参数,String不可变使其参数更安全
  • 线程安全
  • String Pool引用更快
  1. StringBuilder与StringBuffer

    StringBuilder速度快 ,StringBuffer线程安全

  2. Object

二、面向对象

  1. 继承

    • 子类拥有父类非 private 的属性、方法。
    • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
    • 子类可以用自己的方式实现父类的方法。
    • Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
    • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
  2. 初始化顺序

    • 父类(静态变量、静态语句块)
    • 子类(静态变量、静态语句块)
    • 父类(实例变量、普通语句块)
    • 父类(构造函数)
    • 子类(实例变量、普通语句块)
    • 子类(构造函数)

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时是不会进行树化的,以避免调整大小和树化阈值之间发生冲突