Java面试题-day04异常处理

异常处理

1) Error、Exception区别

Error类和Exception类的父类都是throwable类,他们的区别是:

Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

2) Java中的异常处理机制的简单原理和应用。

 异常是指java程序运行时(非编译)所发生的非正常情况或错误。

Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象中,该对象中包含有异常的信息。
Java可以自定义异常类,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception。

1、Error表示应用程序本身无法克服和恢复的一种严重问题,程序只有退的份了,例如说内存溢出和线程死锁等系统问题。
2、Exception表示程序还能够克服和恢复的问题,其中又分为运行时异常和检查异常,运行时异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统继续运行或者让软件死掉。
例如,数组越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException)、类转换异常(ClassCastException);检查异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。
Java为运行时异常和检查异常提供了不同的解决方案,编译器强制检查异常必须try…catch处理或用throws声明继续抛给上层调用方法处理,所以检查异常也称为checked异常,而运行异常可以处理也可以不处理,所以编译器不强制用try…catch处理或用throws声明,所以运行异常也称为Runtime异常。

3) 常见异常

 ArithmeticException(算术异常)
 ClassCastException (类转换异常)
 IllegalArgumentException (非法参数异常)
 IndexOutOfBoundsException (下标越界异常)
 NullPointerException (空指针异常)

4) Java的异常有哪几种,有什么区别?

两大类,一般异常和运行时异常。

一般异常,这些异常是在定义方法时声明抛出的,这些异常必需用try catch抛出,或throws处理,如果不处理程序将编译失败。比如:IOException、FileNotFoundException、SQLException等。

运行时异常是程序运行时可能报出的异常。可以用try catch抓取,也可以不做任何处理。例如:NullPointerException异常是一种比较常见的运行时异常。

5) try-catch-finally(不要在循环内写try…catch)

try{
// 可能会抛出特定异常的代码段
}catch(MyExceptionType myException){
// 如果myException 被抛出,则执行这段代码
}catch(Exception otherException){
//如果另外的异常otherException被抛出,则执行这段代码
} [finally{ //用于资源回收
//无条件执行的语句
}]

6) throw 和和 throws 有什么区别?

throw 关键字用来在程序中明确的抛出异常,相反,throws 语句用来表明方法不能处理的异常。每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。

7) final,finally,finalize区别

final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用

猜你喜欢

转载自blog.csdn.net/m0_56368068/article/details/120754382
今日推荐