这要从异常的机制开始讲起:
1、异常,是提醒人(注意,不是提醒开发时的程序员,而是提醒执行时的使用者)程序处于不正常状态的,因此要告诉这个人,是哪里不正常,也就是异常的类别。
你的代码里就是ClassNotFoundException,这个意思是没找到类。如果只告诉(运行时的)使用者有一个Exception,对使用者来说太不明确。
此时,我们在定义方法的时候用throws XxxException,就是为了在使用时可以明确告诉有Xxx类型的Exception出现了。
2、但是,有些时候,我们不希望到运行的时候再告诉使用者(因为大多数时候使用者是没法处理的),此时我们有两个做法:
A)我们try到它,然后无视它。
这种情况就算出现了异常,也不会抛出,而是默默的就什么都不做了。
这种场景是存着的,因为并不是每个方法都处于重要的地位,如果不重要,偶尔出现错误是可以接受的。
B)我们try到它,然后解决它。
这种情况是因为,如果很重要的情况,不能只是抛出给使用者就算了(因为他通常没法做什么来解决这个问题,一般只能重启程序),此时,在catch里将需要做的后续处理做一下。
前者是告诉调用者处理异常
后者是自己处理异常,调用者不用处理
这个是做异常处理,第一种的意思是不做处理,把异常信息发送给调用这个方法的人,第二种是用try捕获异常,在此方法中做异常的处理
例子:
第一种:
public static void main(String[] args) {
try {
TestException.testException();
} catch (Exception e) {
System.out.println("调用estException出现异常,异常信息为:"+e);
}
}
@Test
public static void testException()throws Exception{
int[] a=new int[1];
int b =a[10];//此时这里会抛出数组越界的异常,线程不会向下执行抛出异常或进入catch
System.out.println("此处不执行!");
}
结果:
调用estException出现异常,异常信息为:java.lang.ArrayIndexOutOfBoundsException: 10
第二种:
public static void main(String[] args) {
try {
TestException.testException();
} catch (Exception e) {
System.out.println("调用estException出现异常,异常信息为:"+e);
}
}
public static void testException(){
try {
int[] a=new int[1];
int b =a[10];//此时这里会抛出数组越界的异常,线程不会向下执行抛出异常或进入catch
System.out.println("此处不执行!");
} catch (Exception e) {
System.out.println("程序出现异常,异常信息为:"+e);
}
}
结果:
程序出现异常,异常信息为:java.lang.ArrayIndexOutOfBoundsException: 10