Java对程序中问题的划分和处理方式
Java程序中的问题可分为两种:第一种是错误,第二种是异常。
错误(Error)是严重的问题,如果程序出现了错误,就无法继续运行下去
异常(Exception)是非严重的错误,当程序中出现异常时,如果对其进行相应的处理,可以避免程序出现错误。
Java中异常的种类:
Java中的异常分为运行时异常(RuntimeException) 和 编译时异常。
运行时异常通常是由于数据的错误和程序本身的缺陷导致的,是不可修复的,所以当出现运行时异常时,程序员要找到引发该异常的问题,并予以解决。
编译时异常通常是程序中调用了某些声明了异常的方法,当调用这些被声明了异常的方法时,要对这些异常进行预处理。
Java是如何处理编译时异常的?
处理编译时异常有两种方式:第一种,用try,catch语句对可能发生异常的代码进行封装。第二种是将这些异常通过声明的方式抛出,留给调用本方法的类或方法去处理。
如何声明异常?
为一个方法声明异常用throws关键字在方法的后面将相应异常声明抛出。告诉调用者本方法可能发生异常,要进行相应的处理。
例如:
void mehod() throws Exception{
....
...
..
}
如何自定义异常?
在编写程序的过程中,有些异常是Java中没有进行描述的,这时我们就要根据Java描述异常的规则自己定义一个异常类。
自定义异常类时这个类要继承Exception类,并提供相应构造函数。
自定义异常时为什么要继承Exception?
因为Exception继承自Throwable,异常具有可抛性。这是Throwable体系的独有特性,如果自定义异常类时不继承Exception,那么自定义的异常就不会具有异常固有的特性。
RuntimeException运行时异常的特点。
RuntimeException异常是一种特殊的异常,这种异常通常是由程序员的疏忽导致的,所以这种异常必须得到处理程序才能继续运行,所以程序中对RuntimeException采取不处理的方法,当出现异常时程序停掉,查找错误并修改后程序才能继续运行。
方法覆盖时异常的特点。
1.当父类方法抛出异常时,子类覆盖方法只能抛出父类异常或该异常的子类。
2.当父类方法抛出多个异常时,子类覆盖方法只能抛出父类方法所抛出异常的一个子集。
3.当父类方法没有抛出异常时,子类覆盖方法也不可以抛出异常,出现异常只能用try-catch处理。
所以,当一个类实现了一个借口时,类在复写接口方法的时候若出现异常就只能内部处理而不能将异常抛出去留给别人处理。