我们平常说的异常就是指Exception,因为这类异常一旦出现,我们就要对代码进行更正,修复程序。
异常(Exception)的分类:根据在编译时期还是运行时期去检查异常?
- 编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常)
- 运行时期异常:runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。(如数学异常)
异常的三个问题
1.哪里出现异常
2.谁来处理异常
3.怎么处理异常
Java异常处理的五个关键字:try、catch、finally、throw、throws
抛出异常throw
throw new NullPointerException("要访问的arr数组不存在");
throw new ArrayIndexOutOfBoundsException("该索引在数组中不存在,已超出范围");
throws
throws是声明,方法可能会抛出异常。
捕获异常try…catch
try{
编写可能会出现异常的代码
}catch(异常类型 e){
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}
**try:**该代码块中编写可能产生异常的代码。
**catch:**用来进行某种异常的捕获,实现对捕获到的异常进行处理。
自定义异常的练习
public class RegisterException extends Exception {
public RegisterException() {}
public RegisterException(String message){
super(message);
}
}
import .RegisterException;
public class Demo5 {
private static String[] names = {"Tony", "Ned", "Robbert", "John"};
public static void main(String[] args) {
try{
checkUserName("Tony");
System.out.println("注册成功");
}catch (RegisterException e) {
e.printStackTrace();
}
}
private static void checkUserName(String s) throws RegisterException {
for (String name : names ) {
if(s.equals(name)){
throw new RegisterException("该用户名已存在");
}
}
}
}