异常的捕获与处理
一、对异常的介绍
异常(Exception)是导致程序中断执行的一种指令流。异常出现时,异常之前的程序是可以正常运行的。
面试题:Error和Exception的区别
- Error:错误;Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。
- Exception:异常;Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。
二、异常处理格式
try {
有可能出现的异常语句
}catch (异常类 对象) {
异常的处理语句
}......
finally {
异常的统一出口
}
以上的三个关键字出现的组合可以有三种:(catch可以一次出现多个)
try…catch
try…finally
try…catch…finally
代码示例:
try {
System.out.println(10/0);
}catch(ArithmeticException e) {
System.out.println("异常已被处理。");
}
如何取得异常的完整信息? 用printStackTrace();方法
代码示例:
try {
System.out.println(10/0);
}catch(ArithmeticException e) {
e.printStackTrace();
}
三、throws关键字和throw关键字
- throws关键字
- 在方法定义时,若该方法出现异常后,不希望进行处理,就使用throws抛出。
- 若已经调用了throws声明的方法,那么在调用时必须明确使用try…catch进行异常捕获,因为该方法有可能产生异常。
- 主方法也是方法,也可以用throws进行异常抛出,这时若产生异常,会交给JVM进行处理。
代码示例:
class Person{
public static int div(int x;int y)throws Exception{
return x/y;
}
}
public class Demo{
public static void main(String[] args) {
try {
System.out.println(Person.div(10/2));
}catch(Excepyion e) {
e.printStackTrace();
}
}
}
- throw关键字
编写在语句之中的,表示人为进行异常的抛出。使用throw产生异常类对象。
代码示例:
public class Demo{
public static void main(String[] args) {
try {
throw new Exception("抛出");
}catch(Excepyion e) {
e.printStackTrace();
}
}
}
- 面试题:throws关键字和throw关键字的区别
- throw关键字:用于方法内部主要表示进行人工的抛出;
- throws关键字:主要在方法声明上使用,明确的告诉用户本方法可能会产生异常,同时该方法可能不处理此异常。
四、异常处理模型
用到关键字try, catch, finally, throw, throws关键字,上一节的代码均是代码模型的标准格式,在此不赘述。
五、RuntimeException类
在Integer类中关于parseInt()方法的定义:
public static int parseInt(String s) throws NumberFormatException
该方法中已经明确抛出一个异常,但调用时即使没有进行异常处理,也可以正常执行,这就属于RuntimeException范畴。
面试题:解释RuntimeException和Exception的区别
- Exception是RuntimeException的父类,使用Exception定义的异常都要求使用异常处理;
- RuntimeException可以由用户选择性的来进行异常处理。
常见的Exception和RuntimeException异常可以查看API文档。
六、assert断言
当程序执行到某些语句之后,其数据的内容一定是约定的内容,但是不影响程序的正常运行。
七、自定义异常类
可以继承两种父类:Exception和RuntimeException。
总结:
- 异常的处理流程;
- 异常的处理格式;
- 异常的处理模型。