异常
1)定义
异常(Exception)即例外,程序没有按自己预想的结果运行出来,出现了非正常情况,即“程序得病了”。
2)分类
- 所有的异常都是从Throwable继承而来的,它是所有异常的共同祖先。
- Error和Exception分别是它的两个子类
- Unchecked Exception为Error的子类
- Checked Exception与Runtime Exception为Exception的子类
其中,CheckedException检查时异常|编译时异常:是在编译时出现的,如果不处理,程序无法执行。
RuntimeException运行时异常:是在程序运行的时候出现,简单的可以通过增强程序的健壮性来处理(if判断)
3)常见的运行时异常
- 空指针 NullPointerException
- 数组索引越界 ArrayIndexOutOfBoundsException
public class test1 {
public static void main(String[] args) {
heihei(-1);
}
static void heihei(int i){
if(i<0){
throw new ArrayIndexOutOfBoundsException();
}
}
}
- 类型转换异常 ClassCastException
- 数学异常 ArithmeticException
System.out.println(4/0);
- 负数异常 NegativeArraySizeException
-
int[] arr=new int[-5];
- 数字格式异常 NumberFormatException
-
- throw :制造异常
-
static void heihei(int i){ if(i<0){ throw new ArrayIndexOutOfBoundsException(); } }
4)异常处理方式
1、throws:抛出异常
抛出异常,当前不处理,异常抛出到上一层,方法的内部把异常抛出到方法上面,谁调用这个方法,谁处理
//方法重写:如果父类方法存在异常抛出 //子类重写方法抛出异常范围<=父类 interface Fu{ public void test() throws FileNotFoundException; } class Zi implements Fu{ public void test() throws FileNotFoundException{ throw new FileNotFoundException("文件找不到了..."); } }
2、try…catch 捕获异常
在当前位置遇到异常的时候就处理,捕获某个异常对象,使用异常的功能
try{ 可能会出现异常的代码; }catch(StringIndexOutOfBoundsException e){ e.... 如果出现这个类型的异常,就执行的代码 }catch(NullPointerException e){ ... }catch(FileNotFoundException e){ ... }catch(Exception e){ .... }finally{ 无论是否出现异常,肯定会执行的代码 }
注:
- 如果try中遇到异常了,try中下面的代码不会执行,直接去执行对应catch中的内容,如果没有遇到异常,正常执行所有的try中代码
- 一个try后可以跟一到多个catch,捕获小范围的异常catch写在上面,否则下面的catch执行不到
- finally中的内容无论当前try...catch结构是否遇到异常都会执行其中的代码,与前面的try..catch是一个结构
-
3、自定义异常