Java面试宝典(一):JavaSE基础(3)——Java中的多态和异常处理

1、Java中实现多态的机制是什么

靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例 对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是 内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法

2、Java中异常分为哪些种类

(1)按照异常需要处理的时机分为编译时异常(也叫强制性异常),也叫CheckedException和运行时异常(非强制性异常,也叫RuntimeException).只有Java语言提供了Checked异常,Java 认为Checked异常都是可以被处理的异常,所有Java程序必须显式处理Checked异常。如果程序没有处理Checked异常,该程序在编译时 就会发生错误无法编译。这体现了Java的设计哲学:没有完善错误处理的代码 根本没有机会执行。对于CheckedException处理方法有两种:

①当前方法知道该如何处理异常,则用try..catch块来处理该异常。

② 不知道,则定义该方法是声明抛出该异常。

运行时异常只有当代码在运行时 才发现的异常,编译时不需要try..catch。RuntimeException如除数是0和数组下标越界 等,其产生频繁,处理 麻烦,若显示申明或者捕获将对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理 程序。

3、error和Exception的区别

Error类和Exception类父类都是Throwable类,它们的 区别如下。

Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足、方法调用栈溢出等。 对于这类错误的导致应用程序中断,仅靠程序 本身无法恢复和预防,遇到这样的错误,建议程序停止。

Exception 类表示程序可以处理的异常,可以捕获且 可能恢复。遇到这类异常,应该尽可能处理异常,是程序恢复运行,而不应该随意终止异常。

Exception类又分为运行时异常和编译时异常。

4、Java 异常处理机制

Java对异常进行了分类,不同的类型异常分别用不同的Java类 表示,所有异常的根类为Java.Lang.Throwable, Throwable下面又派生了两个子类:Error和Exception, Error表示应用程序本身无法克服和恢复的一种严重问题。Exception表示程序还能克服和恢复的问题,又分为系统异常和普通异常,系统异常是软件 本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题, 但在这种问题下还可以让软件系统继续运行或者让软件死掉。例如,数组 脚标越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointException)、类转换异常(ClassCastException);普通异常是 运行环境的变化或异常所导致的问题,是用户可以克服的问题,例如,网络断线、 硬盘空间不够,发生这样的异常后,程序不应该死掉。

Java为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须try..catch 处理或者用throws声明继续抛给上层调用方法处理,所以普通异常也称为checked 异常,而系统异常可以处理也可以不处理,所以 编译器 不强制用try...catch处理或throws声明,所以系统异常也称为unchecked异常

5、请 列举最常见的5个RuntimeException

(1) java.lang.NullPointerException 空指针异常;出现原因:调用了未经初始化的对象或者是不存在的对象。

(2)java.lang.ClassNotFoundExceotion 指定的类 找不到,出现原因:类的名称或路径加载错误,通常都是程序视图通过字符串来加载某个类时可能引发异常

(3)java.lang.NumberFormatException 字符串转换 数字异常,出现原因:字符型数据中 包含非数字型字符

(4)java.lang.IndexOutOfBoundsException 数组角标 越界异常,常用于操作数组对象时发生

(5)java.lang.IllegalArgumentException 方法传递参数错误。

(6)java.lang.ClassCastException 数据类型转换异常

(7)java.lang.NotClassDefFoundException 未找到类定义错误

(8)SQLException SQL异常,常见于操作 数据库时SQL语句错误

(9)java.lang.InstantiationException 实例化异常

(10)java.lang.NoSuchMethodException 方法不存在异常

6、throw和throws的区别

throw:(1)throw语句用在方法体内,表示抛出异常,由方法体内的语句处理

(2)throw是具体向外抛出异常的动作,所有它抛出的是一个异常实例,执行throw一定是抛出了某种异常

throws:(1)  throws语句是用在方法声明后面,表示如果抛出异常,由 该方法的调用者来进行异常的处理。

(2)throws主要是声明 这个方法会抛出某种类型的异常,让它的使用者要知道需要 捕获的异常类型。

(3)throws表示出现异常的一种可能性,并不一定会发生这种异常。

7、final,finally、finalize的区别

(1)final:用于声明属性、方法和类,分别表示属性不可变、 方法不可以覆盖、被其修饰的类不可继承

(2)finally:异常处理语句结构的一部分,表示总是执行

(3)finalize:Object类的一个方法,在垃圾回收器执行的时候会被调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。该方法更像是一个对象声明周期的临终方法,当该方法被系统调用则代表该对象即将“死亡”,但是需要注意的是,我们主动行为上去调用该方法并不会导致该对象“死亡”,这是一个被动的方法(其实就是回调方法),不需要我们调用。

你可能感兴趣的:(Java技术)