异常Exception
异常分为两类:
Exception
的子类除开RuntimeException
都为编译时异常,又叫受检异常或受控异常RuntimeException
的子类都为运行时异常,又叫非受检异常或非受控异常。
区别:
- 运行时异常属于不可查异常,即编辑器不要求强制处理的异常,然而对于非运行时异常,编辑器会强制要求处理。即不出来就编译则无法通过。
注意:
- 都在运行时报错
自定义异常:继承Exception几位编译时异常,继承RuntimeException则为运行时异常
运行时异常的机制:
当出现运行时异常时,有两种方法,一是在异常所在的地方进行处理,二则是向上抛出异常(在方法尾部添加throws Exception
),如果上一级依旧未处理异常,当main
函数抛出异常时,即将异常抛给JVM
时,因为JVM没有处理异常的机制,整个程序将会终止。
异常的捕获和处理
使用try-catch-finally
语句完成
try {
//可能出现异常的代码
}catch(异常类型 变量名) {
//处理异常的代码
}finally {
//一定会执行的代码
}
当执行try{}
中的代码时出现异常,并且catch到对应的异常时,则会执行catch
中的代码,最后执行finally
中的代码,try{}
中的后续代码不会执行。
当执行try{}
中的代码时尾出现异常,catch{}中的代码将不会执行,但会执行finally{}中的代码
自定义异常
public class TextException {
public static void main(String[] args){
try {
p();
} catch (MyException e) {
e.printStackTrace();
}
}
public static void p() throws MyException{
throw new MyException("异常");
}
}
public class MyException extends Exception{
public MyException(){}
public MyException(String string){
super(string);
}
}
ng string){
super(string);
}
}