Java中的异常分为两大类:编译时异常和运行时异常。
运行时异常:所有的RuntimeException类及其子类被成为运行时异常。
编译时异常:除去所有的运行时异常都称为编译时异常。
处理方法:编译时异常必须显示处理,否则程序就会发生错误,无法通过编译。运行时异常无需显示处理,也可以和编译时异常一样处理。
比如说一个运行时异常的例子:
public class Yichang{
public static void main(String[] args){
method();
}
public static void method(){
int[] a={1,2,3};
a[3]=10;
System.out.println(a[3]);
}
}
在运行后就会报出这样的错误:Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3;
在这个代码中我们可以看出a[3]是属于索引越界了的,但是它在编译时并不会报错,而是在运行时报出错误,这种就叫做运行时异常,他在编译的时候并不会产生错误信息。
编译时异常的例子如下:
public class Yichang{
public static void main(String[] args){
method();
}
public static void method(){
String a="2022-6-13";
SimpleDateFormate b=new SimpleDateFormate("yyyy-MM-dd");
Date c=b.parse(a);
System.out.println(c);
}
}
此时,在Date c=b.parse(a);下面就会提示我们有异常,等待我们处理,这时候编译不成功,更不用说是后续的运行,而处理的方法也很简单,就是用try…catch包围并给出相应的捕捉就行了,即将Date后的改变一下即可如下:
try{
Date c=b.parse(a);
System.out.println(c);
}catch(ParseException e){
e.PrintStackTrase();
}
有些时候呢我们可能会遇到我们处理不了的异常,这个时候呢我们就会用到throws,throws的格式通常是throws 异常类名;这个格式是跟在方法的括号后面例如:public static void method() throws ArrayIndexOutOfBoundsException{};
这个是假设这个方法中存在这个异常,所以这样写,当然即使即使里面没有这个异常也可以写上这个,古话说:思则有备,有备无患。就是做这个就是为了防止存在异常,如果异常不存在也没关系。
thows这个处理异常的方法只是把异常抛出去,并不是说是把这个异常问题解决了, 当程序运行到异常处时并不会继续往下运行,所以当想要程序继续运行的话,仍然需要用try…catch去处理异常。
当用throws处理编译时异常时,假如说异常是在一个方法中,那么throws会把这个异常抛出到使用这个方法的另一个方法中去,此时另一个方法会显示编译异常需要我们处理,这个时候我们仍然需要我们处理异常,这个也相当于层层嵌套,所以说我们仍然需要解决这个异常。(当一个方法中的异常用throws处理时,就变成谁使用这个方法谁需要处理这个异常)
总而言之,处理异常的主要解决方法仍然是try…catch所以我们想要程序继续运行下去就需要我们用try…catch去处理异常。