Java基础之异常处理机制
一、异常处理机制
1、异常的祖先是Throwable,有如下两个子类:
a、Error:表示错误,错误产生后程序员不能通过代码的方式纠正,只能事先避免,好比生命已经停止。
b、Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的
2、 Throwable中的常用方法
public void printStackTrace();打印异常的详细信息
public String getMessage();获取发生异常的原因
二、异常分类:
1):编译时期异常:Checked:Exception类和他的子类,除了运行时期异常其他的就是编译时期异常.
2):运行时期异常:Runtime: RuntimeExeption类和RuntimeException的子类.
编译时异常: 要求我们必须处理异常(throws/try-catch),不处理,则编译不能通过.
运行时异常: 可处理,可不处理.
处理异常的方法:
1、使用try-catch
在开发过程中建议使用这个异常处理机制,进行专业处理。Try必须与catch或finally同在,不能单独使用,二者必须出现一个。finally块中的语句一定会执行,无论是否存在错误。除非在try或catch语句中出现了退出JVM的语句,不执行。
finally与return先后执行问题:
public class FinallyDemo {
public static void main(String[] args) {
System.out.println(show());
}
/* 判断return与finally哪个先执行:
* 1、直接在try中返回一个变量
* 2、在finally中让这个变量自增,打印出结果
* 如果是finally先执行的那么finally执行完之后变量的结果就
* 会自行的加一,如果是return先执行那么就会先返回在进行自增
* */
public static int show() {
System.out.println("...start...");
int mun = 1;
try {
return mun;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//一定会执行的代码快,除非在该代码执行之前
//就执行了system.exit(0);就不会执行该代码块
mun++;
System.out.println(mun);
}
System.out.println("...end.....");
mun++;
return mun;
}
}
2、抛出异常
抛出异常的方式有两种:
1):在方法的内部使用throw,抛出一个异常对象.如果抛出的异常是一个编译时期异常,就必须在方法后面声明抛出的异常类型,如果是运行时期的异常就不需要声明异常类型
如下面的程序,可能出现的编译时期异常有FileNotFoundException,与ArithmeticExcepting.就必须在方法后面声明,否则编译出错
如果出现的异常为编译时期异常时,我们还可以将其转换成运行时期异常就不用在方法后面声明了。例如:
Paste_Image.pngJDK1.7中的throw的新特性:如果throw抛出的真实异常是编译时期异常也必须在方法后面声明异常类型
Paste_Image.png2):在方法上使用throws声明可能抛出的异常类型.
这个方法是将异常交给调用者,此异常为非运行时期异常。一旦使用throws,当前方法就不再过问该异常,交给调用者处理。