java异常处理机制
异常的概念和java异常体系:
异常时程序运行过程中出现的错误。java把异常当做对象来处理,并且定义了一个基类java.lang.Throwable
作为所有异常的超类。异常分为两大类,错误Error和异常Exception.
Throwable类是所有异常和错误的超类,有两个子类Error和Exception,分别表示错误和异常。Exception又
分为运行时异常(RuntimeException)和非运行时异常。
Error:程序无法处理的错误,有OutOfMemoryError、ThreadDeath等,当这些错误发生时java虚拟机
一般会选择终止线程。
Exception是程序本身可以处理的异常,分为运行时异常和非运行时异常,程序中应该尽可能去处理
这些异常。
异常的捕获和处理:
有关的五个关键字——try catch finally throws throws\
异常处理的基本语法格式:
try{
//可能出现异常的代码部分
}
catch(异常类型 异常变量){
//执行异常操作
}
catch(异常类型 异常变量){
//执行异常操作
}
…
finally{
//处理完try与catch操作后的收尾操作,异常统一出口
,异常发生,方法返回前,总是要执行的代码 }
try语句块:表示要尝试运行代码,try语句块中的代码受异常监控,其中的代码发生异常时,会抛出
异常对象。
catch语句块:捕获try语句块中的异常并进行处理。当try语句块中出现异常时,catch会捕获发生的异常,并且和自己所
带的Throwable类型的参数进行匹配,若匹配,则执行catch语句块中的代码,并且将catch语句块的参数(异常变量)指向所抛出
的异常对象。catch语句可以有多个,用来匹配多个异常中的一个,一旦匹配上以后,就不再尝试匹配
其他catch语句块。
finally语句块是紧跟在catch语句块之后,总是在方法返回前执行,不管try语句块是否发生异常。
try语句不能单独存在,可以和catch、finally组成的try…catch、try…catch…finally、try…finally三种结构,catch语句可以有一个或者多个,但是try、catch、finally不能单独存在
try、catch、finally三个代码块中的语句变量独立存在,不能相互访问
多个catch语句块时,是以由上到下的顺序进行匹配,当匹配到其中一个catch语句块时,就执行该catch语句块
中的代码,而其他catch语句块将不会被执行。
throw关键字:用于方法体内部,用来抛出一个Throwable类型的异常。如果所有方法都层层上抛,则该异常最终将会由java虚拟机
处理,打印出异常信息和堆栈信息。
throws关键字:用于方法体外部的方法声明部分,用来声明方法可能会抛出某些异常
public static void test()throws Exception{
//声明方法抛出一个检查异常
throw new Exception("test方法中的Exception");
}
PS:虽然finally语句块都要被执行,但是当try语句块发生错误时,则程序会被终止在try语句块,
此种情况下,finally语句块将不会执行。
异常的概念和java异常体系:
异常时程序运行过程中出现的错误。java把异常当做对象来处理,并且定义了一个基类java.lang.Throwable
作为所有异常的超类。异常分为两大类,错误Error和异常Exception.
Throwable类是所有异常和错误的超类,有两个子类Error和Exception,分别表示错误和异常。Exception又
分为运行时异常(RuntimeException)和非运行时异常。
Error:程序无法处理的错误,有OutOfMemoryError、ThreadDeath等,当这些错误发生时java虚拟机
一般会选择终止线程。
Exception是程序本身可以处理的异常,分为运行时异常和非运行时异常,程序中应该尽可能去处理
这些异常。
异常的捕获和处理:
有关的五个关键字——try catch finally throws throws\
异常处理的基本语法格式:
try{
//可能出现异常的代码部分
}
catch(异常类型 异常变量){
//执行异常操作
}
catch(异常类型 异常变量){
//执行异常操作
}
…
finally{
//处理完try与catch操作后的收尾操作,异常统一出口
,异常发生,方法返回前,总是要执行的代码 }
try语句块:表示要尝试运行代码,try语句块中的代码受异常监控,其中的代码发生异常时,会抛出
异常对象。
catch语句块:捕获try语句块中的异常并进行处理。当try语句块中出现异常时,catch会捕获发生的异常,并且和自己所
带的Throwable类型的参数进行匹配,若匹配,则执行catch语句块中的代码,并且将catch语句块的参数(异常变量)指向所抛出
的异常对象。catch语句可以有多个,用来匹配多个异常中的一个,一旦匹配上以后,就不再尝试匹配
其他catch语句块。
finally语句块是紧跟在catch语句块之后,总是在方法返回前执行,不管try语句块是否发生异常。
try语句不能单独存在,可以和catch、finally组成的try…catch、try…catch…finally、try…finally三种结构,catch语句可以有一个或者多个,但是try、catch、finally不能单独存在
try、catch、finally三个代码块中的语句变量独立存在,不能相互访问
多个catch语句块时,是以由上到下的顺序进行匹配,当匹配到其中一个catch语句块时,就执行该catch语句块
中的代码,而其他catch语句块将不会被执行。
throw关键字:用于方法体内部,用来抛出一个Throwable类型的异常。如果所有方法都层层上抛,则该异常最终将会由java虚拟机
处理,打印出异常信息和堆栈信息。
throws关键字:用于方法体外部的方法声明部分,用来声明方法可能会抛出某些异常
public static void test()throws Exception{
//声明方法抛出一个检查异常
throw new Exception("test方法中的Exception");
}
PS:虽然finally语句块都要被执行,但是当try语句块发生错误时,则程序会被终止在try语句块,
此种情况下,finally语句块将不会执行。