有时候面试题不一定非要答对,因为有些东西你不一定会记住。
1.String s=new String("abc"); new了几个对象
new了两个对象,我之前看过String的源代码,String里面的字段还有一个对象。
2.Overload和Override的区别
前者重载,可以写多个同名的参数类型不同,但返回值必须相同的方法,也可以写多个同名的参数个数不同,有无返回值亦可的方法。
后者重写,指的是子类覆盖父类的方法,一般多态就是这么用的,子类指向父类引用,在调用方法的时候用父类引用调用,实际调用的是子类的方法。
需要注意的是,重写需要条件,父类的方法不能是final的,finaly修饰的方法不能被重写。
3.try{ return} catch{} finally{}; return还是finally先执行。
这个还真不知道,平时写项目的时候很少用这种用法,如果给我测试的话,我会打一个断点,单步跟踪来看看实际的运行顺序,如果因为需求必须知道原理所在,我会去翻一下《深入了解虚拟机》这本书,然后得到确切答案,以目前我的水平来看,应该是return先执行。
4.5种运行时异常。
NullPiontException
ClassCastException
BoundArrayException
IOException
FileNotFoundException
(不知道有没有记错= =)
6.abstract和interface的区别
简单点说,后者是前者的一个子集。
abstract可以修饰抽象方法,而一个类只要有一个抽象方法,就必须用abstract定义该类,即抽象类。
用interface修饰的类,里面的方法都是抽象方法,因此在定义接口的时候,可以直接不加那些修饰,系统会默认的添上去。接口里面的字段都是公有常量,即public static final修饰的字段。
7.Hashtable和Hashset
两者都是用了哈希值把数据存放在集合里。
前者可以添加多个相同的对象,后者只能添加的对象不能相同,也就是equals不能为true。
需要注意的是把对象存放进这两个集合里面后,不要更改其equals判定需要的字段,否则在get的时候取不出来,因为哈希值改变,get的位置也会改变,但存放位置没变,不对应,所以可能会造成内存泄露。
后面的安桌,培训完再回答 |