本文针对java中的一些基本知识点进行归纳终结,希望能给大家带去一些帮助吧。
1、方法的签名
方法签名组成内容包括:方法名+参数类型+参数顺序+返回值
注意的地方是重载方法的签名只是由方法名,参数类型和参数顺序决定,跟返回值没有关系。
2、对象的生成过程
以创建对象A为例,
第一,首次创建对象A或者A的静态方法或静态域被访问的时候,A的class对象会被加载。
第二,在加载A的class对象的时候可能会发现A有基类,此时先暂停A的加载,转而去加载其基类,所有基类的static域比子类先初始化
第三,载入class文件之后,会创建一个该类的class对象,所有关于静态初始化的动作会被执行,所以静态初始化只在class对象首次加载时进行一次
第四,当使用new的时候,首先A对象在堆上分配足够内存空间,这块内存空间会被清空,对象中的原始类型都被设成缺省值,对象引用设成null。
第五,执行所有字段定义处的初始化,从基类开始。
第六,执行构造器(第一行会执行基类构造器)
3、对象销毁过程就是对象创建过程的逆序
4、死锁的条件
1、必须有循环等待
2、资源不能被抢占
3、至少有一个资源是不能共享
4、至少有一个任务占用一个资源并且等待另外一个资源
5、内部类的特点
1、非静态内部类的创建将持有外部类的一个引用
2、非静态内部类可以访问外部类的任意成员变量
3、静态内部类等同于普通类
4、内部类的作用是支持多继承
5、内部类不支持覆盖
6、嵌套内部类也可以访问所有外部类的成员变量
7、非静态内部类必须获取到外部类的对象才可以创建
6、finally语句块在try或catch语句中的return函数之前执行
7、非静态属性,静态属性和静态方法都可以被子类继承,但是不可以被覆盖,也就是说这些东西不具有多态性。
8、列出各种List,Set,Map,Queue的异同
1.1、ArrayList 线程不安全,底层采用数组结构,对于随机get,set ArrayList优于LinkedList
1.2、LinkedList线程不安全,内部采用链表结构,对于新增,删除操作LinkedList优于ArrayList
1.3、Vector 线程安全,当新增元素超过初始化大小时,Vector会扩大到原来容量的一倍,而ArrayList只会扩大原来的%50
1.4、CopyOnWriteArrayList 是ArrayList线程安全的一个变体,对于所有可变操作都是通过对底层数组进行一次性的复制来实现的。CopyOnWriteArrayList中,写入数据会将导致创建整个底层数据的副本,修改数据将在这个副本上操作,而读取数据仍然在原数据上进行。当修改完成时,一个原子性的操作将新数组换入,使得读取操作可以看到这个新的修改。对读取操作远远多于写操作的应用非常适合
2.1、HashSet 线程不安全,放入的元素需要重写equals和hashCode函数,避免放入的元素重复
2.2、TreeSet 线程不安全,放入的元素需要实现Comparable接口,内部采用红黑树存储元素
2.3、LinkedHashSet 线程不安全,按照放入元素的顺序来维护集合的链接表,其他和HashSet类似
2.4、CopyOnWriteArraySet 线程安全,CopyOnWriteArraySet基于CopyOnWriteArrayList实现
2.5、EnumSet 专门为枚举类设计的集合类,类型必须是指定枚举类型的枚举值,集合是有序的,根据元素在枚举类型定义的顺序来决定集合元素的顺序
3.1、HashMap 线程不安全,内部采用链表法解决哈希冲突,key需要重写equals和hashCode方法,查找元素是通过hashCode获取到链表,再通过equals在这条链表上查找数据
3.2、TreeMap 线程不安全,内部采用红黑树来存储元素,元素需要重写Comparable接口
3.3、LinkedHashMap 非线程安全,按照插入元素顺序来遍历Map,可以在构造函数中设置参数,允许LRU算法进行排序
3.4、HashTab线程安全,key和value不能为null
3.5、ConCurrentHashMap 线程安全,ConCurrentHashMap配合了HashMap和HashTable二者的优势,实现了细粒度的锁,性能比HashTable好
3.6、WeakHashMap 与HashMap基本类似,区别在于前者key所引用的对象采用的是弱引用,一旦系统回收了这块内存,那么对应的key-value将被删除
3.7、EnumMap 专门给枚举类使用的枚举Map,内部顺序按照枚举类定义的枚举元素顺序
4.1、ArrayBlockingQueue 线程安全,基于数组的阻塞队列实现,内部维护一个定长数组,以便缓存队列中的对象
4.2、LinkedBlockingQueue 基于链表的阻塞队列,内部维护一个数据缓冲队列,当生产者往队列中放入数据时,队列会从生产者手获取数据,并缓存在队列内部,而生产者立即返回,只有当缓冲队列达到最大容量时,才会阻塞生产者队列,直到消费者从队列中消费掉一份数据,生产者线程会被唤醒。
4.3、DelayQueue 元素需要实现Delayed接口
4.4、PriorityBlockingQueue 基于优先级的阻塞队列
4.5、PriorityQueue 非线程安全的优先队列