异常
- 初识
防御式编程:
LBYL:“ Look Before You Leap ”,在操作之前就做好检查;
登录伪代码LBYL示例:
boolean ret = false;
ret = 输入用户名();
if (!ret){
处理用户名登录错误;
return ;
}
ret = 输入密码();
if (!ret){
处理密码登录错误;
return ;
}
ret = 输入验证码();
if (!ret){
处理验证码登录错误;
return ;
}
......
EAFP:“ It’s Easier to Ask Forgiveness than Permission ”,先操作,遇到问题再进行处理。
登录伪代码EAFP示例:
try{
输入用户名();
输入密码();
输入验证码();
......
}catch (用户名输入异常){
处理用户名输入异常;
}catch (密码输入异常){
处理密码输入异常;
}catch (验证码输入异常){
处理验证码输入异常;
}
......
由以上的示例我们可以看出LBYL和EAFP两种风格代码的特点,以及对比可以看出EAFP风格更简约以及容易理解。
- 基本用法
try{
//有可能出现异常的语句
}catch( 异常类型 异常对象){
// ...
}finally{
// 异常出口
}
①处理异常和不处理异常的区别
假如对如下代码可能出现异常的情况我们不进行处理:
public class test {
public static void main(String[] args) {
int a = 10;
int b = 0;
System.out.println( a / b);
System.out.println(a);
System.out.println(b);
}
}
代码在编译时并没有报错,但我们知道 上述代码中, b 是不能等于 0 的,因此,在运行时会出现算术异常提示:
对于代码中打印 a 和 b 的值并没有继续执行,即一旦出现异常,程序就终止了;
现在我们修改上述代码,用try catch 执行:
public class test {
public static void main(String[] args) {
int a = 10;
int b = 0;
try {
System.out.println( a / b);
}catch (ArithmeticException e){
e.printStackTrace<