异常处理
(What?)异常是所有人都会出现的问题,没有没有异常的程序。
异常可分为运行时异常和编译时异常
注意:运行时异常只能在运行的时候被抓住。
编译时异常需要在编译时就要去处理,如果不处理异常就不能通过编译。
(How?)处理异常的三种方法:
1、避免异常()
2、ftr---catch---finally
注意:try和catch最好同时出现,可以有多个catch。
try语句只能抓住语句中的第一个异常。
try语句抓住了异常,就马上把程序流程走向权限交给catch,直接执行catch语句块中的代码。
如果catch语句后面出现了finally语句,finally语句都会被强制执行,除非你关掉JVM或者电脑。
3、抛出异常
throw:抛出另一个异常对象,如果抛出的是运行时异常不会自动提示,一但被执行,就会真正发生一个异常对象被抛出
throws:不是一段执行代码,只是警告方法调用者,本方法有可能会发生异常,调用者需要自行处理。
throw和throws的区别(这个可能会在面试的时候会被提问)
throw出现的位置是在方法内,而throws出现的位置是在方法的声明部份。
throw抛出运行时异常不会自动提示,而throws会自动提示。
throw是一段可执行代码,一但被执行就会真正发生一个异常对象被抛;throws不是执行代码,只是警告调用者,本方法有可能发生异常,调用者需要自行处理。
异常的解决方案:
1、提前判断,让异常根本不能出现。
2、try---catch(补救手段)。
如果throw后面跟上非运行时异常,就需要要求方法声明部分使用throws。
在重写方法的时候,子类抛出的异常不能比父类抛出的异常多(多是指范围)
注意:如果父类方法抛出的异常和子类方法抛出的异常没有继承关系是不被允许的。
3、不能明确解决方案,把异常抛出,交给调用都解决。
异常处理宗旨;只要抓住了异常就要处理,为了让代码继承运行。
异常也是可以自定义的。
注意:1、一定要继承Excepion或者Throwable.
2、一定要有一个带Excepion或者Throwable参数的构造方法。这样才能把各种异常装入到异常对象上。
3、一定要有一个带String参数的构造方法,这样才能实现业务异常的封装(业务异常:是指JVM不报异常的异常)。
4、添加自定义异常的自身的方法。