JAVA 面试整理,面试汇总

来源:互联网 发布:邮政网络培训学院手机 编辑:程序博客网 时间:2024/05/17 01:55

1、JAVA是通过重写和重载来实现多态性的。

重写:同样的方法签名,不同的方法实现

重载:同样的方法名,不同的参数类型或参数个数

2、JAVA中如果存在不再使用的对象,但是程序又持有该对象的引用,就会导致对象无法回收的情况,内存泄露。

3、char类型变量可以存储一个汉字,因为JAVA中以UNICODE编码,一个char占16个bit位,即两个字节,所以存储一个汉字没有问题。

4、String str=null;表明声明了一个String对象的引用str,但是没有为其分配内存空间;

String str="";表明创建了一个长度为0的空字符串,并在内存分配了空间。

5、String类被final关键字修饰,所以不能被继承。

6、==和equals的区别:

==比较的是内存地址和内容;equals比较的是对象的内容,跟地址无关。

7、面向对象3大特性:封装性,继承性,多态性。

8、抽象类和接口的区别:

抽象类中可以有方法的实现,可以指定方法的访问修饰符;接口的所有方法必须是抽象的,并且不能指定方法的访问修饰符。

9、重写equals方法时,一定要重写hashcode方法,保证equals满足的情况下,hashcode必须相等

主要原因是默认从Object继承来的hashCode是基于对象的ID实现的。
如果你重载了equals,比如说是基于对象的内容实现的,而保留hashCode的实现不变,那么很可能某两个对象明明是“相等”,而hashCode却不一样。
这样,当你用其中的一个作为键保存到hashMap、hashTable或hashSet中,再以“相等的”找另一个作为键值去查找他们的时候,则根本找不到。
——而这是反直觉的,因为“我要找的就是那个相等的对象,他明明在,我却找不到”。

10、所有异常类的父类是Throwable,不是Exception。

11、ReentrantLock可重入互斥锁,与synchronized类似,但是功能更加强大,它由最近成功获得锁但是还未释放该锁的线程拥有。为了保证申请的锁能够及时的释放,使用finally释放。

12、创建有返回值的线程,实现Callable接口,重写call方法。

13、创建线程池,Executors的方法创建,newCachedThreadPool,newFixedThreadPool。

14、Collection是一个接口,是List,Set,Queue的父接口,其中定义了集合类的通用方法,add,remove等等,该接口继承了Iterable接口,因此可以使用Foreach遍历集合中的元素;

Collections是一个类,是为Collection接口类型对象定义的工具类,提供很多静态方法,排序,查找等。

Java中的集合类,接口大致分为两类:Collection接口和Map接口。

15、list可重复,set不能重复。