Error 和 Exception 区别是什么?
前一篇有,不再说明。
运行时异常和一般异常(受检异常)区别是什么?
答:异常体系中throwable类主要有两大类:error和exception,其中exception类分为两大类:RuntimeException和CheckedException。这两种异常都是在代码执行期间发生的,主要区别在于编译器如何在编译期间对待:要求提前处理受检异常,但对于运行时异常则不会。
受检异常:这些异常在编译时就会被检查,意味着代码中出现了可能抛出受检异常的方法时,编译器会要求你必须处理,例如用try--catch或用throws关键字声明。例如试图打开一个不存在的文件。
运行时异常:编译时不会被检查,就算代码可能出现异常也不会强迫你检查,通常表示代码中的缺陷,例如数组越界等。
JVM是如何处理异常的?
答:在一个方法中如果发生异常,这个方法会创建一个异常对象,这个异常对象中会包含异常名称、异常描述以及异常时的状态。创建异常对象并转交给JVM的过程称为抛出异常。可能有一系列的方法调用最后才进入抛出异常的方法,这一系列方法调用的有序列表叫做调用栈。
JVM会顺着调用栈查看是否有可以处理异常的代码,如果有,调用它处理。如果JVM发现有可以出现异常的代码时,会把异常发给它,如果没有找到可以处理异常的代码块,JVM会将异常转交给默认异常处理器,会打印出信息并终止程序。
throw 和 throws 的区别是什么?
1、throw用于显示抛出异常,throws用于声明方法可能会抛出的异常
2、throw后面只能接一个异常对象,throws后面可以接多个异常类
3、throw在方法体内使用,throws在方法签名中使用
final、finally、finalize 有什么区别?
答:final是修饰符,可以修饰变量、方法、代码块;finally用于try-catch语句;finalize是一个方法,用于对象清理操作,例如释放资源。
NoClassDefFoundError 和 ClassNotFoundException 区别?
答:按error和exception的区别来回答。
try-catch-finally 中哪个部分可以省略?
答:catch
try-catch-finally 中,如果 catch 中 return 了, finally 还会执行吗?
答:会,会在return之前执行finally。如果
catch
块中有
return
语句,并且
finally
块中也有
return
语句,那么
catch
块中的
return
会被
finally
块中的
return
语句覆盖。也就是说,方法会返回
finally
块中的返回值
,所以最好不要在catch中return。