科普知识
前言
大家在运行代码的过程中是否遇到过Error或Exception呢?这两个异常出现就代表我们的程序出了问题,那他们两者之间又有哪些区别和联系呢?Error(错误)和 Exception(例外)都是 java.lang.Throwable类的子类,在Java代码中只有继承了Throwable类的实例才能被throw或者catch。
一、Error
Error 错误是任何处理技术都无法恢复的情况,肯定会导致程序非正常终止。并且 Error 错误属于未检查类型,大多数发生在运行时。绝大部分的 Error 都会导致程序处于非正常、不可恢复状态。下面是常见的错误(Error)类型:
1) NoClassDefFoundError:找不到 class 定义异常
2) StackOverflowError:深递归导致栈被耗尽而抛出的异常
3) OutOfMemoryError:内存溢出异常
二、Exception
Exception又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源码里必须显示的进行捕获处理,这里是编译期检查的一部分。不检查异常就是所谓的运行时异常,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译器强制要求。
2.1 运行时异常(RuntimeException):
1)NullPropagation:空指针异常;
2)ClassCastException:类型强制转换异常
3)IllegalArgumentException:传递非法参数异常
4)IndexOutOfBoundsException:下标越界异常
5)NumberFormatException:数字格式异常
2.2 非运行时异常:
1)ClassNotFoundException:找不到指定 class 的异常
2)IOException:IO 操作异常
三、实战
下面我们通过简单的代码来演示Error和 Exception
3.1 Error
package code.yichang2;
class StackOverflow {
public static void test(int i) {
if (i == 0) {
return;
} else {
//无返回值,将会进入死循环,最终导致堆栈溢出错误
test(i++);
}
}
}
public class Error {
public static void main(String[] args) {
// 执行StackOverflow方法
StackOverflow.test(5);
}
}
运行结果及截图:
3.2 Exception
package code.yichang2;
public class Exception {
public static void main(String args[]) {
int data[] = {1, 2, 3, 45, 6, 78, 9, 10};
for(int i = 0; i < 10; i++) {
//若要正确运行只需将for循环里10改为8或者data.length即可
System.out.println(data[i]);
}
}
}
运行结果及截图:
因为数组的长度只有8,在运行程序的时候,检索数组的下标超过8就会抛出IndexOutOfBoundsException。
小编有话说
最近很忙,但总感觉收获甚微,仿佛在原地踏步。放假的回忆仿佛还停留在昨天,看着学校慢慢开始恢复往昔的人气,新学期就要开始了~