异常处理
快捷键 Ctrl+Alt+t
一般来说,运行时异常可不做处理,因为太常见了,影响代码执行效率;而编译时异常是编译器必须处理的异常
两类异常
- Error 严重错误,程序崩溃:JVM无法解决的严重问题,如StackOverFlowError(栈溢出)和OutOfMemory
- Exception:其他因编程错误或偶然因素导致的一般性问题;空指针访问、读取不存在的文件、网络连接中断等。分为编译时异常【编译时编译器检查出来】和运行时异常【程序运行时RuntimeException】;
异常体系图
异常处理
try-catch-finally
try{
// 可能异常的代码
}catch(Exception e){
// 捕获到异常,将Exception对象e传给catch,程序员自己处理
// 没捕获到异常,catch不执行
// 多个catch只匹配一个catch,如写成子类 NullPointerException e
}finally{
// 一般放置释放资源等代码
// 不管是否捕获异常,都要执行
}
1) 多个catch时,要求子类异常写在父类异常前,只匹配一个catch
2) 可有 try-catch 和 try-finally 结构
3) 执行了finally才执行try 的return或者throw
throws
public void f1 throws NullPoniterException,Exception{
}
- 程序员不写异常处理,默认为throws,一直往上抛异常直到JVM输出异常
- 子类重写父类方法时,异常必须与父类一致,或为父类抛出异常的子类型
- 被调用方法显式抛出编译时异常(throws)时,调用方法必须要处理该异常t -c-f 和t hrow二选一【如果时运行时异常可不处理】
自定义异常
继承父类异常
class customException extends RuntimeException{
}