什么是异常?异常是在程序中导致程序中断运行的一种指令流。
一、异常的概述
1. 生活中的异常案例:
1.睡觉睡得正香,突然一个电话过来,被吵醒了 2.在大街上走着,一个篮球飞过来 3.出门上班坐电梯,电梯故障了... 4....
2.程序中的异常
public static void main(String argsp[]){
int i = 10 ;
int j = 0 ;
System.out.println("============= 计算开始 =============") ;
int temp = i / j ; // 进行除法运算
System.out.println("temp = " + temp) ;
System.out.println("============= 计算结束 =============") ;
}
}
运行结果:
============= 计算开始 =============
Exception in thread "main" java.lang.ArithmeticException: / by zero
at ExceptionDemo01.main(ExceptionDemo01.java:6)
以上的代码在“int temp = i / j ;”位置处产生了异常,一旦产生异常之后,异常之后的语句将不再执行了,所以现在的程序并没有正确的执行完毕之后就退出了。
那么,为了保证程序出现异常之后仍然可以正确的执行完毕,所以要采用异常的处理机制。
常见的异常:
- 除数不能为0(ArithmeticException),如上示代码;
- 空指针异常(NullPointException);
String str= null;
//数组下标越界异常
System.out.println(str.length());
3. 数组下标越界(ArrayindexOutOfBoundsException);
//创建一个存放5个数的数据
int[] num = new int[5];
//for循环
for (int i = 0;i < 6;i++){
//每循环一次将加一个数到数组中,因为循环6次,而数组只能存放5个数,所以异常
System.out.println(num[i]);
}
4. 类型转换异常(ClassCastException)
Father father = new Son();
Son son = (Son)father;
//编译出错,ClassCastException
Father father = new Father();
Son son = (Son) father;
/*在第一个例子中,father被指向一个子类对象,子类也可以指向子类对象。
而第二个例子中,father被传给一个父类对象,子类引用不能指向父类对象。
即很重要的概念是:父类引用指向子类对象。将父类转换为子类之前,应该用instanceof检查。*/