1.常见的异常类型:
Exception:异常层次结构的根类;
ArithmeticException:算数错误形式,如零做除数;
ArrayIndexOutOfBoundsException:数组下标越界;
NullPointerException:尝试访问null对象成员;
ClassNotFoundException:不能加载所需的类;
InputMismatchException:欲得到的数据类型与实际输入的类型不匹配;
IllegalArgumentException:方法接收到非法参数;
ClassCastException:对象强制类型转换出错;
NumberFormatException:数字格式转换异常,如把“abc”转换成数字;
2.Java中的异常处理是通过5个关键字来实现的:try、catch、finally、throw、throws。
3.try-catch-finally结构
语法:try {
//代码块
} catch (异常类型){
//代码块
} finally {
//代码块
}
*注意:
>try-catch-finally结构中 try 块是必须的,catch 和finally 块均为可选,但两者至少需出现其中之一。即使在 try 块和 catch 块
中存在 return 语句,finally 仍然会被执行,执行顺序:执行 try 块或 catch 块中的 return 之前的语句,再执行 finally 快中的 语句,最后执行 try 块或 catch 块中的 return 语句退出。
>finally 块中语句唯一不执行的情况:在异常处理代码中执行System.exit(1);将退出Java虚拟机。
>可以在一个 try 语句块后面跟多个 catch 语句块,分别处理不同的异常。但排列顺序必须是从特殊到一般,最后一个一般 为Exception类。
例如:try {
//代码块
} catch(InputMismatchException){
//代码块
} catch(ArithmeticException){
//代码块
} catch(Exception e){
//代码块
} finally {
//代码块
}
4.throw 和throws 的区别:
》作用不同:throw 用于在程序中抛出异常;throws 用于声明在该方法内抛出了一场。
》使用的位置不同:throw 位于方法体内部,可以作为单独语句使用;throws必须跟在方法参数列表的后面,不能单独使用。
》内容不同:throw 抛出一个异常对象,而且只能是一个;throws后面跟异常类,而且可以跟多个异常类。
例:public void setSex(String sex) throws Exception { //用 throws 声明异常
if("男".equals(sex) || "女".equals(sex) ) {
this.sex = sex;
} else {
throw new Exception ("性别必须是\"男\"或者\"女\"!"); //用throw抛出异常
}
}