异常的继承结构:
Throwable: 顶级父类
--Error: 错误,程序无法处理
--VirtulMachineErrorJava --虚拟机运行错误
--StackOverFlowError --栈溢出异常
--OutOfMemoryError
--Exception: 我们可以编码修复的错误
--RunTimeException --运行时异常
--ArithmeticException --算术异常
--InputMismatchException --输入不匹配异常
--IOException
--FileNotFoundException
运行时异常可以不做编码处理,只不过有时运行会报错
Java是不强制要求代码做运行时异常处理的,只不过处理后程序更加完美健壮
捕获异常:
自己处理异常
try{ //当第一个异常出现后,代码就不会继续向下执行
可能异常代码段 //多段catch也只会捕捉到第一个异常
}catch(Exception e){ //不知道什么异常时
System.out.println("请输入正确数据"); //处理方案,处理异常给用户
e.printStackTrace(); //异常发生时,执行堆栈的内容,打印错误信息
e.getMessage(); //得到异常事件信息
}catch( ){
}finally{ //可不写
必定执行代码
}
抛出异常:
自己不处理,交给别人处理
如果有多个异常,用逗号进行分割
如果一个方法抛出了异常,那么谁调用这个抛出异常的方法,谁就需要处理这个异常
有两种解决方案:捕获自己解决,继续向上抛出
但一般会在main方法之前解决
public void method() throws Exception{
throws new Exception("自定义异常"); //抛出自定义异常
}
子类重写父类方法时,子类不能抛出比父类更大范围的异常