在异常初识中只是简单的介绍了异常的体系和异常的解决方法,这篇文章将对异常的一些特殊情况进行介绍。
1.自己定义一个异常类进行声明或者捕获
当我们不了解异常的种类或者异常中没有我们想要的类那么可以自己定义一个异常类,但是这个异常类要根据是编译时异常还是运行时异常去继承不同的异常类,当然可以直接继承最终的异常类或是包括最大的异常类。一般而言都是运行时异常,而运行时异常要继承的类为RuntimeException类。
public class Main1 {
public static void main(String[] args) {
byte[] b;
try{
b=new byte[Integer.MAX_VALUE]; //这里会产生异常,原因是数组的空间也有限制,Integer.MAX_VALUE这个值超过了数组的空间
}catch(OutOfMemoryError e){ //这是异常体系中存在的异常类,也是数组空间过大产生的异常,在这里捕获
System.out.println("数组解决了!"); //一旦捕获到这个异常就解决
b=new byte[10];
}
System.out.println(b.length);
try{
test(121);
}catch(TimeBigerExcetion e){ //这是自己定义的异常类(该类在下面)
System.out.println(e+" 该问题已处理!"); //当我们在运行时捕获到TimeBigerExcetion这个异常时,打印这个异常的信息,然后解决这个问题
}catch(TimeSmallerException e){ //当我们在运行时捕获到TimeSmallerException 这个异常时,打印这个异常的信息,然后解决这个问题
System.out.println(e+" 都已交卷,问题已处理!");
}
System.out.println("over");
}
public static void test(int time) throws TimeBigerExcetion,TimeSmallerException { //这是上面试着运行的方法,我们发现可以抛出多个异常
if(time<0){ //当传进来的参数也就是时间小于0,会产生TimeSmallerException这个异常,我们声明它的对象,并给出信息
throw new TimeSmallerException("时间小于0,不能交卷!");
}
if(time>120){ //当传进来的参数也就是时间大于正常时间,会产生TimeBigerExcetion这个异常,我们声明它的对象,并给出信息
throw new TimeBigerExcetion("时间到了,停止作答");
}
}
}
class TimeSmallerException extends RuntimeException{ //这是自己定义的一个异常类,它继承了RuntimeException类
public TimeSmallerException(String s){ //代参的构造方法,上面声明时创建的对象就是调用的该构造方法
super(s);调用父类的构造方法