异常
因为异常后会有break point,阻断程序的运行。
不应该因为一个不致命的异常(区别于error来说)出现而导致整个程序崩溃,所以说,我们需要异常处理机制
常见异常
运行时异常一般情况下不是必要处理的,编译时异常一般必须处理
空指针异常![](https://i-blog.csdnimg.cn/blog_migrate/c5ae573e2c61e8a7c1ba15e4d94f4b8f.png)
Arithmetic Exception数学运算异常![](https://i-blog.csdnimg.cn/blog_migrate/b3cd23cf787b73d4e39ec7b322685806.png)
数组越界异常![](https://i-blog.csdnimg.cn/blog_migrate/af542e4aea86bf14e65982db231c60b9.png)
类型转化异常![](https://i-blog.csdnimg.cn/blog_migrate/8cf6dc24bfa06afae12383c75e76dd92.png)
数字格式不正确异常![](https://i-blog.csdnimg.cn/blog_migrate/7a24c205ceef720178f368d7f8222d8f.png)
try catch使用![](https://i-blog.csdnimg.cn/blog_migrate/e632bfa9049a684bee9b5d4f5790424f.png)
-
发现异常后直接终止程序,所以e也只能捕获一个exception
-
如果try代码块有多个异常,那么可以使用多个catch来捕获不同类型的异常,遵循子类异常写在前,父类异常写在后边
-
try finally使用 没有捕获异常,最后执行finally,接着报错并终止运行
throws使用
-
a抛出异常,让调用a的方法处理,如果是编译时异常,调用的方法必须进行方法处理,可以继续throws,也可以try_catch处理,运行时异常则不是必须处理
-
throws后边的异常可以是方法中产生的异常类型,也可以是他们的父类
-
如果运行时异常没有处理,那么默认为throws处理
-
子类重写父类的方法时,要求抛出的异常是父类抛出的异常,或者是父类抛出异常的子类
-
两种处理机制不需要同时出现
自定义异常
自定义异常是程序员自己写的异常,可以继承RunTimeException,也可以继承Exception
如果继承Exception属于编译时异常(必要处理)
如果继承RunTimeException,属于运行时异常一般情况下,我们都继承运行时异常应为编译时异常需要给调用的方法作处理