java的异常处理
一、异常体系
Error:描述java运行时内部错误与资源耗尽错误。这种内部错误一旦出现,除了告知用户并使程序安全终止之外,再无能为力。
Exception:
IOException:程序本身没有问题,但由于IO处理导致的程序出错。
RuntimeException:由于程序错误导致的错误。
另外两个概念:
非受查异常(无需强制处理):所有继承于Error或RuntimeException的异常类称为非受查异常。
受查异常(必须强制处理):所有继承于Exception与IOException的类称为受查异常。
java异常处理格式:
try{
//有可能出现异常的语句 ;
} catch (异常类 对象) {
//发生了异常的处理方式
} finally {
//不管是否发生异常都执行
}
可以叠用多个catch块连续捕捉不同的异常,如:
try{
//有可能出现异常的语句 ;
} catch (异常类1 对象) {
//发生了异常1的处理方式
} catch (异常类2 对象) {
//发生了异常2的处理方式
} catch (异常类3 对象) {
//发生了异常3的处理方式
}finally {
//不管是否发生异常都执行
}
throws、throw、assert关键字
throws:作用于方法上
在进行方法定义时候,如果要明确告诉调用者本方法可能产生哪些异常,可以使用throws方法进行声明,表示将异常抛回给调用方。并且当方法出现问题后可以不进行处理。
public static int calculate(int x,int y) throws Exception {
return x / y;
}
但用了throws的方法被调用时,必须用try……catch包围,因为他可能出错,或者在主方法中也throws这个错误,抛给jvm处理:
public static void main(String[] args) throws Exception{
System.out.println(calculate(10, 0));
}
//或者这样
public static void main(String[] args) {
try {
System.out.println(calculate(10, 0));
} catch (Exception e) {
e.printStackTrace();
}
}
throw:一般与自定义异常类搭配使用
public static void main(String[] args){
try {
throw new Exception("抛个异常") ;
} catch (Exception e) {
e.printStackTrace();
}
}
assert:断言
用来判断走到这一步的时候,这个值是不是你希望的正确值:
Assert num == 5 : “应该是55”;
//如果num不是5,就会出错,然后提示应该是55,其实和if差不多