1、异常的概述和分类
I、概念:
异常是指Java程序在运行过程中出现的错误。
II、分类:
2、 JVM默认处理异常的方式
当main函数接收到一个问题是,有两种处理方式:
I、自己处理,例如try…catch;
II、交给调用main的jvm来处理;
jvm会将异常名称、异常信息、异常出现的位置打印在控制台,同时程序将停止运行。
3、异常处理的两种方式
I、try…catch…finally
try—检测异常
catch—捕获异常
finally—释放资源
三种搭配方式:
try catch
try catch finally
try finally
示例:
如果try中有异常,这通过catch将异常捕获,执行catch语句块中的语句,如果try中没有异常,则走catch。当通过try…catch处理了异常后,后面的代码可以继续执行,程序不会中断。catch后面的ArithmeticException是指除0异常,也就是说这个语句只能处理除0异常。
实际开发:
a、安卓开发:try{}catch(Exception e){}将所有异常接收
b、服务端开发:一般都是底层开发,从底层一步一步往上抛
注意:try后面如果跟多个catch,那么小的异常放前面,大的异常放后面,根据多态的原理,如果大的异常放前面,就会将所有的子类对象接收,后面的catch就没意义了
finally关键字:
被finally控制的语句一定会执行,特殊情况不会执行,如在执行前jvm退出( System.exit(0) ),finally 主要用于释放资源,如IO流中关流、还有数据库操作中也比较常见。finally的一定会执行到底有多强大,可以看看这个例子:
下面是运行结果:
如果将return语句改为System.exit(0),finally语句才不会执行。
II、throws处理异常
a、编译时异常的抛出
编译时异常必须要在方法上加throws
b、运行时异常
当抛出运行时异常时,因为在运行时不需要处理,所以方法上无需加throws进行声明。
throw和throws的区别:
throws:
a、用在方法后面,跟的是异常类名
b、可以跟多个异常类名,用逗号隔开,没有先后顺序
c、表示抛出异常,有该方法的调用者处理
throw:
a、在方法体内,跟是是异常对象名
b、只能抛出一个异常对象名
c、表示抛出异常,由方法体内的语句处理
4、自定义异常
和其他类的定义方法一样,只需要继承Exception类即可:
这样就自定义了一个异常