异常
1.程序中的异常
弊端 1.代码臃肿 2.程序员花很多时间调漏洞 3.程序员很难堵住漏洞
2
.异常处理机制(5个关键字)
(1)try 执行可能产生异常的代码
(2)catch 捕获异常
(3)finally 无论是否发生异常,代码总能执行 注:只有一种方法例外,若前面代码中有system.exit(1)的话,finally将不会被执行
(4)throws 声明方法可能要抛出的各种异常
(5)throw 手动抛出异常
注:Exception 是所有异常的父类,所有的类的父类是Object
try---catch 或者 try---catch---finally 或者 try---finally
try{ 代码段 //可能会产生异常的代码段 }
catch(异常类型e//例
exception e){对异常类型处理的代码段
e.exception()//打印异常堆栈信息
} //代码段 System.err.println();输出的字体颜色为红色
try代码里没有出现异常,则不走catch代码段,执行catch段下面的代码段
例:
try {
// 若try内的代码不存在异常,那么不会再走catch,会直接往下走,到finally
// 可以同时有多个catch语句
//多重catch的判断与switch相似,若匹配到一个错误类型则不执行其他catch
// 若出现的错误与catch内的错误不匹配,程序也会直接出错中断
} catch ( NullPointerException e) { // e代表变量名,后续代表打印异常堆栈的信息
e.getMessage(); //打印异常信息字符串,非所有异常提示有错误提示
// 若try内的代码不存在异常,那么不会再走catch,会直接往下走,到finally
// 可以同时有多个catch语句
//多重catch的判断与switch相似,若匹配到一个错误类型则不执行其他catch
// 若出现的错误与catch内的错误不匹配,程序也会直接出错中断
} catch ( NullPointerException e) { // e代表变量名,后续代表打印异常堆栈的信息
e.getMessage(); //打印异常信息字符串,非所有异常提示有错误提示
System.err.println("程序出现错误操作"); //错误信息的输出提示err
// 若有此处有return,也会先执行finally的代码后再return
// 若此处有system.exit(1) 就不会执行finally了。程序就直接结束
// 若有此处有return,也会先执行finally的代码后再return
// 若此处有system.exit(1) 就不会执行finally了。程序就直接结束
}catch (Exception e) {
//需要注意在有多个catch的时候,不能出现先首个catch中是父类Exception在判断,必须先子类后父类
e.getStackTrace() //打印异常堆栈的信息
}finally{
//需要注意在有多个catch的时候,不能出现先首个catch中是父类Exception在判断,必须先子类后父类
e.getStackTrace() //打印异常堆栈的信息
}finally{
System.out.println("程序结束");
}
自定义异常:通过创建一个普通类继承Exception
例:
public class TextException extends Exception{
public TextException(){}
public TextException(String message){
super(message);
}
}
throws:跟在类名后的关键字,作用是声明各种可能要抛出的异常
throw: 在代码块内的关键字,其作用是手动抛出异常,跟throws是组合使用,只要用throw抛出一个异常,要么就地解决该异常,要么就用throws声明异常。若出现异常必须自己手动解决,不能抛给java虚拟机。
例:
public class TextException extends Exception{
public TextException(){}
public TextException(String message){
super(message);
}
}
throws:跟在类名后的关键字,作用是声明各种可能要抛出的异常
throw: 在代码块内的关键字,其作用是手动抛出异常,跟throws是组合使用,只要用throw抛出一个异常,要么就地解决该异常,要么就用throws声明异常。若出现异常必须自己手动解决,不能抛给java虚拟机。
例:
public static void main(String[] args) throws Exception {
//需要注意的是throws可以一次声明多个异常,但throw只能一次抛出一个异常
throw new Exception ("") ;
}
//需要注意的是throws可以一次声明多个异常,但throw只能一次抛出一个异常
throw new Exception ("") ;
}
异常类型 | 说明 |
Exception | 异常层次结构的父类 |
ArithmeticException | 算数错误情况,如以零作除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问null对象成员 |
ClassNotFoundException | 不能加载所需的类 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastIllegalArgumentException | 对象强制类型转换出错 |
NumberFormatIllegalArgumentException
|
数字格式转换异常,如把"abc"转换成数字
|
异常处理原则:
2.异常只能用于非正常情况
3.不要将过于庞大的代码块放在try中
4.在catch中指定具体的异常类型
5.需要对捕获的异常做处理