---------------------- android培训、java培训、期待与您交流! ----------------------
异常声明
当完成某个函数或者方法并且该方法有可能或产生异常时,就可以利用throws关键字声明此方法有可能会产生异常,告知该方法的调用者进行异常处理,不处理则编译失败,具体用法为:方法名称() throws Exception {}。
在该方法利用throws关键字声明有可能会抛出异常后,则必须对该异常进行处理,有两种处理方式,如下:
1.利用try{}catch(){}语句对该异常进行捕捉处理,try{}语句块是尝试执行的代码,如果代码里面产生异常,则该异常会交给catch{}语句去处理。
2.或者继续在方法调用处继续向下一级利用throws声明抛出(如果不断的向下一级抛异常,则最终会由java虚拟机进行默认处理机制处理该异常)。
在方法上声明抛出异常的好处:便于提高安全性,让调用者进行处理,不处理则编译失败。
多异常处理
在方法声明抛出异常的时候,可以进行声明抛出多个异常,但是要注意两点:
1.最好声明更为具体的异常,这样处理的可以更具体;
2.方法可以声明抛出多个异常,相应的,方法声明抛出几个异常,就对应有几个catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系,则父类异常catch块放在最下面。
在进行catch块处理的时候,catch中一定要定义具体处理方式, 不要只定义一句简单的e.printStackTrace();也不要简单的就定义一条输出语句。
自定义异常类
由于项目中可能会出现特有的问题,而这些问题并未被java描述并封装对象,所以对于这些特有的问题,可以按照java的对问题封装思想,将特有的问题,进行自定义异常。自定义异常不被java虚拟机识别,即不会自动抛出,只能手动抛出。
手动通过throw关键字抛出一个自定义异常,注意:当在方法内部出现了throw抛出异常对象,那么必须要给出相应的异常处理,要么在内部利用try...catch语句捕捉异常,要么在方法上利用throws关键字声明异常抛出,让调用者进行处理,一般情况下,方法内部有throw抛出异常对象,方法上就需要利用throws关键字声明异常抛出。
那么如何自定义异常呢?
自定义异常:必须是自定义异常类继承Exception类,因为异常体系有一个特点,即异常类和异常对象都要被抛出,它们都具备可抛性,这个可抛性是throwable这个类中的独有特点,只有这个类中的对象才可以被throws和throw操作,由于父类中已经把异常信息的操作都完成了,所以子类只要在构造时通过super语句将异常传递给父类,就可以通过覆盖父类中的getMessage()方法获取自定义异常信息。用法如下:
public class 异常类名 extends Exception
{
异常类名(String msg) //构造函数
{
super(msg);
}
}
关键字throws和关键字throw的区别:
1.throws使用在方法上,而throw使用在方法内部;
2.throws后面跟的是异常类,而且可以跟多个异常类,(比如throws ArithmeticException,ClassCastException)并且之间用逗号隔开,而throw之后跟的是异常类对象,比如(throw new 自定义异常类();)。
RuntimeException异常
Exception中有一个特殊的子异常类,即RuntimeException(运行时异常),如果在方法内throw关键字抛出该异常,方法上可以不用throws关键字声明抛出异常,编译仍然可以通过,如果在方法上利用throws关键字声明了抛出该异常,调用者可以不用对该异常进行处理,编译仍然可以通过。
原因是此类异常不需要让调用者处理,当该异常发生时,虚拟机希望程序停止,在运行时出现了无法继续运行的情况,希望停止程序后由开发人员对代码进行修正。
自定义异常时,如果希望该异常发生后,程序无法正常继续运行,就让该自定义异常继承RuntimeException类。
对于异常,分两种:
1.编译时,被检测的异常,继承Exception类
2.编译时,不被检测的异常,继承自RuntimeException类
---------------------- android培训、java培训、期待与您交流! ----------------------