1.final,finally和finalize之间的区别;
final关键字意为最终,可修饰类、属性以及方法;
在修饰类时表示该类为最终类不能被继承;
在修饰方法时为固定方法即不可被修改;
在修饰属性时为常量即该变量不可改变;
Finally通常是与try搭配使用,在try执行完后都会经过fianlly语句块;
Finalize的用法是在启动GC垃圾回收的调用,一般使用new关键字创建的对象最终都会被finalize()方法调用回收;
2.static关键字;
static意为静态的意思,它可以修饰属性、方法;
修饰属性的时候为类属性,在没有被保护的情况下可以直接被外部类通过类名.属性调用,同理修饰方法时也是如此;
同一个类中,静态方法里不能调用非静态方法和非静态变量;而相反却可以,原因是静态变量或方法在创建的时候已经被加载,在非静态方法里可以直接调用;
构造方法,代码块和静态代码块之间的执行顺序是:静>代>构
3.常用的集合类:
List接口下的实现类:ArrayList和LinkedList:
ArrayList数组列表,有序可重复,内部通过Array实现,查询快,删除和添加慢,线程不安全;
LinkList双向链表,前后元素有指针作用,顺序读取快,随机读取慢,为此查询慢但增删快,线程也不安全;
Vector可以实现可增长的对象数组,vector的大小可以根据需要增大或缩小,以适应创建Vector后进行添加或移除项的操作;
Map接口的实现类HashMap,TreeMap和LinkedHashMap:
HashMap为常用的map类,无序,它里面存的key-value键值对,键唯一,可为null;底层是entry数组存储key-value,每一个键值对都创建了一个Entry实体,而Entry类时一个单向链接表,具有指针指向性,解决了Hash冲突问题,线程不安全;
TreeMap也为Map接口实现的类,利用红黑树实现key-value,可排序,而二叉树是一种自平衡二叉树查找树;具体可以查看别的资料;
LinkedHashMap继承了HashMap所有特性,但又它自己的双向链表结构,保留了元素的插入顺序;
Set接口的实现类HashSet和TreeSet:
HashSet是基于HashMap实现的集合,对HashMap做了一些封装;HashSet底层是链表的形式保存,有序无重复;
TreeSet是基于TreeMap实现的,有序无重复,支持2种排序,自然排序和提供的Comparator进行排序;
4.接口和抽象类的区别:
接口和抽象类的出现其实面向对象里多态性,两者都需要别的类来实现或继承;
接口里只声明方法,定义的变量只能是静态的常量,接口不能实例化,接口可以多继承,是设计的结果,主要是抽象功能;
抽象类用abstract修饰的类,也不能实例化,但是可以有非抽象方法的实现,是重构的结果,主要是抽象类别;
5.线程池:
线程池是一种多线程的处理形式,处理过程中将任务提交到线程池进行处理;主要是解决服务器的资源消耗和高并发问题,因为平常创建线程时,需要创建多个线程来处理一个或多个任务,并且一个县城只能处理一个任务,在执行完任务后就会销毁,这样会消耗大部分的内存;而线程池的作用则是减少了创建和销毁线程的次数,每个工作的线程都会被重复使用,从而达到了效益最大化;
线程池一般在执行任务的时候会提交给核心线程池创建线程,当线程数量已经大于核心线程数时会将线程存放于缓冲队列,当缓冲队列满了但是最大线程数还没满的时候就会再次创建线程,当最大线程数也满了的时候,就会拒绝执行任务,此时会抛出一个拒绝执行异常;接下来就是尝试拒绝策略;
6.线程:
简单来说线程就是一条执行路径,当分配一个任务的时候,会找到当前一个线程来执行该任务,它是进程的一个执行流,是CUP调度和分配的最小单位;为此可知,一个进程是由多个线程组成,当线程的数量增加到一定数量了也就成了多线程;
多线程的实现方式,四种,常用的有两种;
- 通过继承Thread类执行里面的run方法来实现多线程;
- 通过实现Runnable接口并执行里面的run方法来实现多线程;
- 通过实现Callable接口并执行里面的call方法实现多线程;
- 通过创建线程池的方法来实现多线程;
- 前面两种启动线程都是通过对象.start()方式进行调用;
7.==与equals之间的区别:
1)==是可以进行基本数据类型之间的比较,equals不可以;
2)==是比较两个对象是否指向同一个引用,而equals不仅可以比较两个对象是否指向同一个引用,还有根据类的属性重写equals方发进行对象比较;
3)==比较String对象时两个变量是否指向同一个对象的引用,而equals比较多是两个变量的值是否相等;
8.Collection和Collections之间的区别:
Collection是集合类的上层接口,即使List和Set的父接口,里面包含了一些集合的基本操作;
Collections是集合的一个工具类,封装了集合的相关方法,如排序和序列化;
9.Wait和sleep的区别:
1.wait是object的方法,sleep是Thread的方法;
2.wait会释放锁,也就是会让出资源,加入到等待队列中,sleep不会释放锁,不会让出资源;
3.wait在对象调用notify方法时,会进入到对象锁定池中等待进入运行状态,sleep不需要唤醒,会在其睡眠结束后重启进入运行状态;
闲来总结一下,不喜勿喷,望提出批评!