异常的捕获及处理

 

知识点:

1.异常的产生以及对于程序的影响;

2.异常处理的格式;

3.异常的处理流程;

4.Throw,throws关键字的使用;

5.异常处理的使用标准;

6.自定义异常.

异常的描述:

异常是导致程序终端的一种指令刘,如果异常没有进行合理处理的话,会导致程序终端执 行

一旦出现异常,产生异常以后的语句不再执行

异常处理可以使程序即使出现了异常,也可以让程序正常的执行完毕

 

 

处理异常格式:

Java提供了三个关键字 try catch finally

try{

//有异常的代码

}catch(异常类型 对象){

//异常处理

}catch(异常类型 对象){

//异常处理

}catch(异常类型 对象){

//异常处理

}finally{

//不管是否出现异常,都执行的统一代码

}

 

对于以上的操作组合:try...catch,try...catch...finally,try...finally(不建议使用)

使用异常处理,即使程序中出现了异常,也可以正常执行

出现异常的目的是解决异常,所以为了能够进行异常的处理,可以使用异常类中提供的printStackTrace()方法进行异常信息的输出.

 

异常处理范例:

public class Test{

public static void main(String[] args) {

System.out.println("算术运算开始");

try{

System.out.println(10/0);

}catch(Exception e){

e.printStackTrace();

}finally{

System.out.println("不管是否有异常我都会执行");

}

 

System.out.println("算术运算结束");

}

}

异常处理流程(核心,带面试题)

java.lang.ArithmeticException为例查看继承架构:

java.lang.Object

  java.lang.Throwable

      java.lang.Exception

          java.lang.RuntimeException

              java.lang.ArithmeticException

所有的异常类都Throwable的子类,Throwable下有两个子类

面试题:请解释ErrorException的区别?

Error:指的是JVM错误,即:此时的程序没有执行,用户不能执行

Exception:指的程序运行中产生的异常,用户可以处理

也就是说所谓的异常处理指的是所有的Exception以及它的子类异常

面试题:请解释java中的异常处理流程

 

1.当程序在运行过程中出现了异常后,那么会由jvm自动根据异常的类型实例化一个与之匹配的异常类对象;

2.产生了异常对象之后,会判断当前的语句上是否存在有异常处理,如果没有异常处理,那么就交给JVM进行默认的异常处理,处理的方式:输出异常信息.而后结束程序的执行;

3.如果此时存在有异常的捕获操作,那么会由try语句来捕获产生的异常类实例化对象,而后与try以后的每一个catch语句进行比较,如果有符合的catch捕获类型,则使用当前的catch语句来进行异常的处理,如果不符合就继续向下匹配后面的catch;

4.不管最后异常处理是否能够匹配,那么都要向后执行,如果此时程序中存在有finally语句,如果有,就先执行finally语句,但是执行完毕后需要根据之前的catch匹配结果来决定如何执行,如果之前有匹配到catch语句,那么就继续执行finally之后的代码,如果之前没有匹配到相应的catch语句.那么就将此异常交给jvm处理,输出异常信息,结束程序执行

整个过程就好比方法重载一样,catch就好比方法名,根据catch后的参数进行类型匹配,但是所有java对象都存在有自动的向上转型的操作支持,如果说真的要匹配类型,简单的做法就是匹配Exception就够了

两点说明:

1.在编写多个catch捕获异常的时候,捕获范围大的异常一定要放在捕获异常范围小的后,否则程序编译报错

2.虽然直接捕获Exception比较方便,但是这样也不好,因为所有的异常都会按照同样一种方式进行处理;一些要求严格的项目里面,异常一定要分开处理.

 

throws关键字

throws关键字主要用于方法声明上,指的是当方法之中出现异常后交由被调用处处理

也就说调用了具有throws声明的方法之后,不管操作是否出现异常,都必须使用try...catch来进行异常处理

在主方法上如果继续抛出异常,那么这个异常就交给JVM进行处理,也就是采用默认的处理方式,输出异常信息,而后结束程序调用

主方法上不要加上throws,因为程序如果出错了,也希望能够正常执行.

throw关键字

在程序中可以使用throw手动抛出异常

面试题:请解释throw和throws的区别

throw:指的是在方法之中人为抛出一个异常类对象(这个异常类对象可能是自己实例化,或者抛出已经存在的)

throws:在方法的声明上使用,表示此方法在调用时必须处理异常,可以声明多个

 

RuntimeException类 运行时异常

这种异常类的最大特征在于:程序在编译的时候不会强制性的要求用户处理异常,用户可以根据自己的需要选择性的处理异常,如果用户没有处理,产生异常了,将交给JVA处理,也就是说RuntimeException的子异常类.用户可以根据情况处理

面试题:请解释Exceprion与RuntimeException的区别?请列举出几个你常见的RuntimeException

1.Exception是RuntimeException的父类;

2.使用过Exception定义的异常必须要被处理,而RuntimeException的异常可以选择性处理;

常见的RuntimeException:ArithmeticException,NullPointerException, ClassCastException

 

 

自定义异常

自定义异常类可以继承Exception(强制处理异常)或者RuntimeException(选择性处理异常

class AddException extends Exception{

public AddException(String msg){

super(msg);

}

})

 

 

 

 

上一篇:String类中的常用方法


下一篇:使用ResourceBundle读取配置文件