异常面试题
1、Java 中的异常处理机制的简单原理和应用
原理:当 JAVA 程序违反了 JAVA 的语义规则时,JAVA 虚拟机就会将发生的错误表示为一个异常。
应用:违反语义规则包括 2 种情况。一种是 JAVA 类库内置的语义检查。例如数组下标越界,会引发 IndexOutOfBoundsException。另一种情况就是 JAVA 允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用 throw 关键字引发异常。所有的异常都是 java.lang.Thowable 的子类。
2、JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义
Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在 Java 中,每个异常都是一个对象,它是 Throwable 类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。
一般情况下是用 try 来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理;
try 用来指定一块预防所有“异常”的程序;
catch 子句紧跟在 try 块后面,用来指定你想要捕捉的“异常”的类型;
throw 语句用来明确地抛出一个“异常”;
throws 用来标明一个成员函数可能抛出的各种“异常”;
Finally 为确保一段代码不管发生什么“异常”都被执行一段代码;
3、运行时异常与一般异常有何异同
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
4、常见到的 runtime exception
NullPointerException(空指针异常),ArrayIndexOutOfBoundsException(数组下标越界异常),NumberFormatException (数字格式化异常),ClassCastException(类型转换异常), ArithmeticException(数学运算异常)
5、final, finally, finalize 的区别
final:修饰符(关键字);如果一个类被声明为 final,意味着它不能再派生出新的子类,不能作为父类被继承,因此一个类不能既被声明为 abstract的,又被声明为 final 的;将变量或方法声明为 final,可以保证它们在使用中不被改变;被声明为 final 的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改;被声明为 final 的方法也同样只能使用,不能重载。
finally:在异常处理时提供 finally 块来执行任何清除操作;如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize:方法名;Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
6、try-catch-finally 中哪个部分可以省略
try-catch-finally 其中 catch 和 finally 都可以被省略,但是不能同时省略,也就是说有 try 的时候,必须后面跟一个 catch 或者 finally。