J2SE面试题讲解[1]
1、JAVA中的异常处理机制的简单原理和应用
简单原理:每当产生异常以后,如果没有程序进行相应的处理,则程序出现中断的现象,那么,此时实际上一旦产生一个异常之后,JVM会抛出一个异常类的实例化对象,如果此时使用了try语句进行捕获的话,则可以进行异常处理,如果没有的话,则交给JVM进行处理,当try进行处理,当try语句捕获到了异常以后,会与catch中的异常类进行匹配,如果匹配成功,则使用此catch语句进行处理。
应用:简单的引用,就是在所有有throws关键字的地方加入try…catch
如果按照一个标准做法的话:try ,catch,finally,throw,throws关键字应该一起使用。
2、垃圾回收的优化和原理,并考虑2种回收机制。
将无用的对象空间进行释放,两种回收:自动回收,手工调用System.gc()方法,实际上调用System.gc()就相当于调用了Runtime.Runtime().gc()方法。
3、Error和Exception有什么区别?
Error表示是有JVM进行处理的,是JVM出错
Exception是可以由程序进行处理的,使用try…catch进行处理
4、谈谈final,finally,finalize的区别。
?Final是定义是常量、方法、类的、声明的方法不能被复写、声明的类不能被继承
?Finally:是异常的统一出口
?Finalize:是垃圾回收前的收尾工作,是Object类中定义的
5、Anonymous Inner Class(匿名内部类)是否可以extend(继承)其他类,是否可以implements(实现) interface(接口)?
允许继承或实现,因为匿名内部类就是在抽象类和接口的基础之上发展起来的
6、Static Nested Class和Inner Class的不同。
|-使用Static声明的内部类就是外部类,可以通过外部类,内部类直接访问
|-普通的内部类是不能够直接被外部所访问的,需要通过外部类实例再找到内部类实例
7、HashMap和Hashtable的区别。
?HashMap
|-JDK1.2以后推出,是新的类
|-采用异常处理方式,性能较高,但是属于非线程安全
|-允许设置null
?Hashtable
|-JDK1.0时候推出,是旧类
|-采用同步处理方式,性能较低,但是属于线程安全
|-不允许设置null,否则将出现NullPointerException
8、什么时候用assert?
?JDK1.4之后添加的新关键字, ----assert,表示断言,既程序执行到某个地方之后值肯定会设计好的。
?一般开发中很少使用assert
?要想使用断言,则必须使用-ea参数
9、GC是什么?为什么要有GC?
?GC:垃圾收集
?使用GC可以进行垃圾空间的释放
10、String s=new String(“xyz”);创建了几个String Object?
产生了两个实例化的对象,一个是匿名对象“xyz”,另外一个是通过关键字new实例化的。
11、Sleep()和wait()有什么区别?
?Sleep()是Thread类中定义的方法,表示线程的休眠,会自动唤醒
?Wait()是Object中定义的方法,需要手工调用notify()或notifyALL()方法
12、JAVA中有没有goto?
?Goto()属于保留的关键字,JAVA中存在goto,只是无法使用
13、数组中有没有length()这个方法?String有没有length()?
数组中存在length的属性,String中存在length()方法
14、Overload和Override的区别,Overload的方法是否可以改变返回值的类型?
?重载:Overload
在一个定义的若干方法
所有的方法名称相同,但是参数的类型或个数不同
?重写:Override
在继承的关系中
子类定义了与父类同名的方法,参数类型或个数最好完全一样,注意访问权限不能更加严格
?重载的时候不能依靠返回类型区分的,而是靠参数
15、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
依靠hashcode()和equals()两个方法完成,==属于地址值比较,而equals属于内容比较,使用的是equals方法
16、列举出一些最常见的runtime exception。
NumberFormatException、ArrayOutInderofboundException、NullPointerException、classCastException
17、Abstract class和interface有什么区别?
?抽象类
由抽象方法和常量、变量、全局常量、构造方法、普通方法组成
使用abstract声明
子类通过extends继承抽象类,子类如果不是抽象类,则必须覆写抽象类中的全部抽象方法
存在单继承局限,一个子类只能继承一个抽象类
抽象类可以实现若干个接口
?接口
全部由抽象方法和全局常量组成
使用interface声明
子类通过implements实现接口,子类如果不是抽象类,则必须覆写抽象类中的全部抽象方法
不存在单继承局限,一个子类可以同时实现多个接口
接口不能继承一个抽象类,但是允许继承多个接口
18、启动一个线程是用run()还是Start()?
使用Start()方法,因为要通知JVM进行CPU资源的分配
19、Try{}里面哟一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return之前执行,只要是finally{}的代码永远会被执行