编译时异常是一定要处理的异常,如读取文件找不到、类加载找不到等;
而运行时异常可以不处理,如类型转换异常、空指针、数组角标越界、除0等;因为太多了,都处理会降低程序性能。
对于try-catch-finally的处理:
catch捕获try的异常后,无论是否有return,都执行finally中的代码;
如果在try-catch-finally中没有return,则处理完异常后继续执行后续代码,即使你在catch中执行了e.printStackTrace();控制台报红了,但这种报红是catch中人为的一种处理方式,后续代码仍会执行!
throw
如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
如果一个异常对象通过调用次序层层上抛,最终一定要有一个try-catch进行处理,throw只上抛异常,而try-catch才是真正处理异常
自定义异常
一般处理的是运行时异常;
需要继承RunTimeException或者Exception,实现空参构造器和字符串构造器,添加序列版本号;
手动异常抛出
当程序执行不符合人为预期时,但此时没有发生程序自带的异常时,可以手动throw new Exception(“手动抛出异常信息”)