Java中程序发生的不正常行为称为异常
StackOverflowError栈溢出错误
java当中描述异常根据类来进行描述的
Throwable:是异常类的顶层类,派生出两个重要的子类Error和Exception
异常分为运行时异常(非受查)(程序开始运行的时候)和编译时异常(受查)
受查异常(程序还没有运行就开始报错)
异常的处理
Java处理异常的核心是EAFP
关键字:throw try catch final throws
在Java中可以通过throw关键字抛出异常
throws是声明异常
throw必须写在方法体内部,一旦抛出异常,程序就不会再执行了。
异常的捕获
try
{可能出现异常的代码放在这里}
在try中抛出异常的位置之后代码将不会执行。
catch(要捕获异常对象的类型 e)
没有捕捉到对应的异常就会交给jvm处理,如果交给jvm处理程序就会直接终止
最后还有finally
e.printStackTrace显示异常出现在哪里,并不影响后续代码执行
所有的异常的父类都是Exception
如果你捕捉的异常具备父子类关系一定是子类在前,父类在后。
finally一定会被执行,不管是否抛出异常,都被执行,资源会回收。尽量避免在finally中使用return语句。
异常的处理,如果一直向上传递都没有合适的方法处理异常,那么最终就会交给jvm处理,程序就会异常终止。
总结
程序先执行try的代码,如果try中的代码有异常则会结束try中代码看和catch中的异常类型是否匹配。找到匹配类型就会结束catch中的代码,一直向上调用处理异常,指到JVM来进行处理
自定义异常
自定义一个类继承RuntimeException运行时异常非受查异常
自定义一个类继承Exception编译时异常受查异常