JAVA基础知识整理(最基础)
基本数据类型占用大小:
- byte 1字节
- short 2字节
- int 4字节
- long 8字节
- char 2字节
- float 4字节
- double 8字节
- boolean 1byte
构造方法特点:
- 方法名与类名相同
- 无返回值类型
- 参数可有可无
堆、栈、静态存储区:
- 定义变量、对象引用、函数调用都保存在内存中栈空间
- 通过new的关键字和构造器创建的对象存放在堆空间
- 直接定义的字面量和常量放在静态存储区
- 相对来说、栈空间操作最快也最小、大量的对象都放在堆上
值传递和引用传递:
- 对象值传递 等同于创建了对象的副本,副本被改变不影响原有对象
- 对象引用传递 传递的不是对象、而是对象的引用。任何对引用对象的改变都会影响到各对象上
子类继承父类 子类的实例化过程:
- 子类继承父类,会先生成父类的实例化对象,在生成子类的实例化对象,子类会默认调用父类的无参构造方法
重载/重写:
- 重载 仅方法名相同即可
- 重写 子类重写父类方法需同名、同参、通返回值
抽象类:
- abstract只能修饰类和方法
- 抽象类不能实例化(不能new对象)
- 抽象类只能被继承
- 抽象方法无方法体只能在子类中实现
HashMap/HashTable 区别:
- HashTable 线程安全,HashTable实现方法里有synchronized来保证线程同步
- HashMap性能上会优于HashTable
- HashMap多线程环境需要使用Collections来保证线程安全
- HashMap 可使用null做key 、HashTable不允许
- HashMap是继承AbstractMa而HashTable是继承Dictionary
- HashMap初始容量为1<<4,HashTable初始容量为11,二者均在75%扩容,HashMap扩容每次翻倍,HashTable扩容每次翻倍+1
- 二者底层均为数组+链表,但两者计算hash方法不同
- HashTable的hash计算是key的hashcode对table长度取模
- HashMap的hash计算是Key的hashcode进行二次hash再对table长度取模,HashMap的散列值更好
- HashTable可用get()判断是否包含某key而HashMap不可以,因为HashMap允许为null,故要用containsKey判断
TreeMap/HashMap 区别:
- TreeMap key按自然顺序排序
- HashMap key按哈希码排序 比TreeMap更快
ArrayList/LinkList 区别:
- ArrayList 是基于动态数组的数据结构
- LinkList 是基于链表的数据机构
- 随机访问 ArrayList优于LinkList(LinkList需要移动指针)
- 增删 LinkList优于ArrayList(ArrayList需要移动数据)
Array/ArrayList 区别:
- Array可存基本数据类型和对象而ArrayList仅可存对象
- Array大小固定,ArrayList动态扩容(每次150%)
set:
- set常见实现类是HashSet和TreeSet
- TreeSet是二叉树实现的,其中数据是自动排好序的,不允许放入null,值不能重复
- HashSet是哈希表实现的,其中数据无序,可放入null,但只允许一个null,值不能重复
- HashSet要求放入的对象必须实现hashcode()方法,放入的对象是以hashcode码为唯一标识,因为相同内容的hashcode相同,所以内容不可以重复
集合/数组区别
- 数组定长 集合不定长
- 数组只能存储相同类型数据,集合可存储不同数据类型数据
- 集合复用性和维护性更高