一、异常处理机制
方式一:try--catch--finally
说明:
1、finally可以不写;
2、使用try将可能出现异常的代码包装起来,在执行过程中,一旦出现异常,就会出现一个异常类的对象,再根据catch去匹配对应的异常;
3、匹配到某个异常,进入到对应catch中去处理异常,处理完成跳出try--catch结构(无finally),继续执行该结构后的代码;
4、catch结构中异常如果无子父类关系,则声明的先后顺序无影响,若有子父类关系,则父类声明在子类的下面;(比如Exception是NumberFormatException的父类)
5、在try中声明的变量,跳出该结构后就不能使用;
6、当catch中也抛出异常时,finally也会被执行;
7、finally语句一定会被执行,比如在try、catch中有return语句;
/*
try{
//可能出现异常的代码
}catch(异常类型1 变量名1){
//处理异常的方式1
}catch(异常类型2 变量名2){
//处理异常的方式2
}catch(异常类型3 变量名3){
//处理异常的方式3
}...
finally{
//一定会执行的代码
}
方式二:throw + 异常类型
1、写在方法声明处,指明此方法执行时,可能会出现的异常类型;
2、异常代码后续的代码不会被执行;
3、子类重写的方法所抛出的异常不能大于父类所抛出的异常;
4、如果子类重写的方法没有抛出异常,则父类也不能抛出异常,如果子类重写的方法有异常,则必须用try--catch--finally方式处理;
public class EcmDef {
public static void main(String[] args) {
try {
int i = Integer.parseInt(args[0]);
int j = Integer.parseInt(args[1]);
int result = ecm(i,j); //非运行时异常 需要显式处理(采用try-catch)
System.out.println(result);
}catch (NumberFormatException e){
System.out.println("数据类型不一致");
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("超出数组下标");
}catch (ArithmeticException e){
System.out.println("除以了0");
} catch (EcDef e) {
//获取异常中的输出语句
e.getMessage();
}
}
public static int ecm(int i, int j) throws EcDef {
if (i < 0 || j < 0){
//非运行时的异常 要处理(即在方法处用throw处理)
throw new EcDef("分子或分母为负数了...");
}
return i / j;
}
}
//自定义异常类
class EcDef extends Exception{
static final long serialVersionUID = -3387510993124229948L;
public EcDef(){
}
public EcDef(String msg){
super(msg);
}
}
二、项目三(开发团队调度软件)
(下方为代码)