在理想状态下,用户输入数据的格式永远都是正确的,选择打开的资源(文件或数据库资源)也一定存在 ,并且程序永远不会出现bug,但是这是永远不可能的。既然我们不能避免异常我们要怎么处理异常呢 ?java语言有是怎么样提供异常处理技术的 。
java中异常主要分为两类,一是编译时被检测的异常;Exception和其子类,除了RuntimeException体系。二是编译时不检测的异常;Exception中的RuntimeException体系
编译时:这种问题出现,让编译时被检测到以便处理,即这种问题可以被处理。编译时不处理,无法让功能继续,更多是因为调用者引发而产生的,此种问题一般不处理,但在运行时程序强行停止,让调用者进行代码修正。
java中可以使用throws抛出异常,也可以使用try{}catch(){}finally{}处理异常。
throws使用在函数内上,抛出异常类,可同时抛出多个用逗号隔开。
下面看一个例子:
public class TestException{
public static void main(String[] args){
int[] arr = new arr[3] ;
getArrayValue.getValue(arr,4);
}
}
class FushuException RuntimeException{ //自定义异常类
FushuException(){
}
}
class getArrayValue{
/*
函数功能:返回指定数组下标为i的元素值。
如果i值是否在合法值的取值范围
*/
public static int getValue(int[] arr,int i){
if(i>arr.length){ //i值大于数组下标抛出数字下标越界
new IndexOutOfBoundsException();
}else if(i<0){
new FushuException(); //i值小于数字下标越界抛出下标不能为负异常,此
}else{
return arr[i];
}
}
}
自定义异常:
1、用户自定异常类的时候要么继承Exception要么继承RunException。当继承Exception类时,是在编译时抛出异常,此时要在编译的时候解决。当继承RuntimeException异常类时,程序中出现的异常讲在程序运行是抛出。
2、继承Exception或RuntimeException的原因: 1)异常体系有一个特点:异常类和异常对象都被抛出,他们都具有可抛性。这个可抛性是Throwable这个体系单独有的特点,只有此体系中的类和对象才可被throws和throw操作。 2)为了让该类具备操作异常的共性方法。 3、定义异常信息:异常处理原则,1、函数内部如果抛出需要检测的异常,那么还书上必须声明,否则在函数内部try掉,否则会编译失败。2、如果调用了声明异常函数要么try掉要么throws,否则编译失败。3、在功能函数内部可以解决的用try catch处理,若在功能函数内部不能处理的用throws抛出,由调用者解决。
【注】如果父类的方法没有抛异常,那么子类覆盖时绝对不能抛异常,此时只能try掉。 子类覆盖异常类的方法时,如果父类方法有抛异常,那么子类的方法只能抛父类的异常或者父类异常类的子类。