异常【面试题】 1.受检异常和非受检异常一、首先是异常的本质受检异常和非受检异常都是继承自Throwable这个类中分别是Error和Exception,Error是程序报错系统收到无法处理的错误消息它和程序本身无关。二、然后是对受检异常和非受检异常的定义受检异常和非受检异常均派生自Exception这个类。1. 受检异常的定义是程序在编译阶段必须要主动捕获的异常遇到该异常有两种处理方法通过try/catch捕获该异常或者通过throw把异常抛出去2. 非受检异常的定义是程序不需要主动捕获该异常一般发生在程序运行期间比如NullPointException三、他们的优点和缺点受检异常优点有两个第一它可以响应一个明确的错误机制这些错误在写代码的时候可以随时捕获并且能很好的提高代码的健壮性。第二在一些连接操作中它能很好的提醒我们关注异常信息并做好预防工作。不过受检异常的缺点是抛出受检异常的时候需要声明而这个做法会直接破坏方法签名导致版本不兼容。非受检异常的好处是可以去掉一些不需要的异常处理代码而不好之处是开发人员可能忽略某些应该处理的异常导致带来一些隐藏很深的Bug比如流忘记关闭连接忘记释放等。2.final块一定会执行吗finally语句块在两种情况下不会执行程序没有进入到try语句块因为异常导致程序终止这个问题主要是开发人员在编写代码的时候异常捕获的范围不够。在try或者cache语句块中执行了System.exit(0)语句导致JVM直接退出3.final、finalize、finally的区别final是关键字修饰的类不能继承修饰的方法不能覆盖修饰的变量不能重新赋值。finalize是标识符是Object类中的一个方法名垃圾回收时由GC来调用被回收的对象的finalize方法。finally是关键字和try联合使用或者和try...catch联合使用放在finally语句块中的代码一定会执行。4.分析以下程序的执行结果public class FinallyTest { public static void main(String[] args) { m(); System.out.println(m2()); m4(); } public static int m(){ int i10; try { System.out.println(i i);//先执行 return i;//return 一定会在最后执行 } finally { System.out.println(hello world);//再执行 } } public static int m2(){ int i10; try { return i; } finally { i;//对临时变量进行 } } public static int m3(){ int i10; int tmpi; tmp; return i; } public static void m4(){ try { System.out.println(try...); System.exit(0);//退出JVM的话finally语句块不再执行 return;//代码是return;的时候finally语句是可以执行的。 } finally { System.out.println(finally); } } }5.异常总结总结异常处理机制中的关键字 try catch finally throw throwsthrow 用来手动抛出异常让异常发生。throws用在方法的签名位置上用来声明以便抛出。声明一种处理异常的态度是抛给调用这来处理。try catch finally三个关键字组合使用try...catchtry... finallytry...catch...finally方法在覆盖的时候对异常有没有要求子类在重写父类的方法时子类不能比父类抛出的异常更多可以更少。重写时不能抛出更宽泛的异常