声明:将问题标识出来,报告给调用者,依次向上(向调用者)声明,
声明方式:在函数上:throw 异常类名——保证在调用函数时就能见到这个异常(函数里声明异常就看不见/函数被封装)
1class Demo{
2 void show() throws Exception//向上声明
3 {
4 throw new Exception();
5 }
6}
7 Demo d = new Demo();
8 d.show();
当代码写到这里,会出错误:第八行错误:要么捕获要么声明——因此继续向上声明
7 Demo d = new Demo()throws Exception;
主函数中向上调用者声明就到虚拟机:虚拟机就要做出最后的处理:显示异常并且终止程序
总结:如果函数内通过throw 抛出了编译时的异常而且没有捕获,那么必须通过trows 进行声明,让调用者去处理
(继承 RuntimeException 是无需声明和捕获的)
————————————————————————————————————————————————————
捕获:标准语句
try{
//需要被检测的代码和语句
}
catch(异常类 变量名){
//异常的处理语句
}
finaly{//可以没有这个语句
//一定会被执行的语句
}
上例捕获:
class Demo{
void show() throws Exception//向上声明{
throw new Exception();
}
}
Demo d = new Demo();
//捕获其实也是对异常的处理,处理后Java认为这个程序的安全隐患已经解除,程序其他部分是可以正常进行的
try{
d.show();
//需要被检测的代码和语句//当检测到异常就把异常传给catch
}
catch(Exception e){//接收到的异常对象: new Exception()
System.out.println("异常发生了!!");
//异常的处理语句
}
捕获其实也是对异常的处理,处理后Java认为这个程序的安全隐患已经解除,程序其他部分是可以正常进行的
小技巧:Java的编译器最后才检查异常
关于编译异常和运行异常的总结:
1.自定义内容的异常类都由继承而来,都要抛出 throw
2.继承:Exception:要有声明throws(JVM给出最后的处理方式,显示和结束程序)或者是捕获(由编写者给出处理方式,程序可以继续执行)
RuntimeException:不需要声明和捕获,最后也会由JVM做出解决方式,显示和结束程序