异常有以下几种:

java捕获超时异常并上报 java捕获运行时异常_java捕获超时异常并上报

重点几种:

Error(系统错误):描述的是内部系统出现错误;用户什么也干不了;

Exception(异常):描述的是由程序和外部环境引起的错误,这样的错误能被捕获;

RuntimeException(运行时异常):虽然是异常的子类,但是单独挑出来说明;它描述的是程序设计错误,错误的类型转换,数组越界访问,都会由JVM抛出RuntimeException;

RuntimeException的几种举例:

java捕获超时异常并上报 java捕获运行时异常_JVM_02

 

Error是免检异常,它们在运行前,不会被编译器发现;运行过后,JVM会报错,类似OOM这种;

除免检异常(和RunTimeException)外所有的异常全部是必检异常,他们在运行前会被编译器强制引入trycatch语句;

 

 

Java处理异常的三个步骤:

1.声明一个异常(注意这里声明异常是用throws,后面跟的是异常类名,而且声明是放在函数体后面)

2.捕获一个异常;   try{ }catch{ }catch{ }catch{ }可加多个catch; 

3.?抛出一个异常(不一定会用到):当异常处理器无法处理这个异常的时候,或者调用者只是想发现它并不想处理它;

(抛出异常用throw,后面加的是异常对象,往往抛出一个异常是在一个方法体内部);

 

声明异常

java捕获超时异常并上报 java捕获运行时异常_java捕获超时异常并上报_03

常把异常的名字放在方法的背后,若有多个异常则用逗号分隔;

 

捕获异常

在try语句中写入可能会出问题的语句,运行时若出了问题则往catch走,没出问题则跳过catch;catch语句中放了出现异常时处理异常的逻辑语句;

 

来看下面一个例子:

java捕获超时异常并上报 java捕获运行时异常_JVM_04

蓝色箭头处数组越界,所以会发生运行是异常;由于这个异常是免检异常,所以声明和捕获这里其实都不需要写;

 

 

finally语句:

先看个例子:

java捕获超时异常并上报 java捕获运行时异常_java捕获超时异常并上报_05

 

①.当try中没有出现异常,会执行finally语句和trycatchfinally语句块(简称tcf语句)后面的语句;

②.当try出现了异常,(例如try中statement2异常,statement3不会执行),并被catch捕获,直接跳到相应catch语句中执行语句,finally和tcf后的语句都会执行

③.当try中出现异常,也是照上面一样,而没有被catch捕获,会只执行finally语句;

④当try中出现异常,也是照上面一样,虽然被catch捕获了,但又被抛出,会只执行finally语句;

 

最后,finally语句无论如何都会执行,就算trycatch语句中有return,finally也会在return前执行,最后在执行return;