一、异常体系
1、error
error类层次描述了java运行时系统内部错误和资源耗尽错误,一般指与jvm或动态加载等相关的问题,
如:虚拟机错误,动态链接失败,系统崩溃等。
2、exception
所有异常类的父类,其子类对应了各种各样的可能出现的异常事件。
3、exception分类
(1)运行时异常 runtime exception
可不必对其处理,系统自动检测处理
一类特殊的异常,如被0除,数组下标超范围等,其产生比较频繁,处理麻烦,如果需要显示的声明或
捕获将会对程序可读性和运行效率影响很大
(2)检查异常 checked exception
必须捕获进行处理,否则会出现编译错误
注意:只有Java提供了checked异常,体现了java的严谨性,提高了java的健壮性。同时也是一个备受争议的问题
二、异常处理
1、手动抛出异常throw
(1)java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要手工创建并抛出
(2)在捕获一个异常前,必须有一段代码先生成异常对象并把它抛出,这个过程我们可以手工做,也可以有JRE来实现
但是他们都是throw子句。
(3)注意抛出运行时异常和checked异常的区别
抛出checked异常,该throw语句要么处于try块中,要么方法签名中石油throws抛出,
抛出运行时异常,没有以上要求
2、声明异常throws
1、当checked exception产生时,不一定l立刻处理它,可以再把异常throws出去
2、如果一个方法抛出多个已检查异常,就必须在方法的首部列出所有的异常,之间以逗号隔开
3、子类声明的异常不能超过父类声明的范围:父类没有声明异常,子类也不能;不可抛出原有方法抛出
异常类的父类或上层类
import java.util.InputMismatchException;
import java.util.Scanner;public class TestException6 {public static void main(String[] args) throws Exception{try{getAvg();}catch (Exception e){e.printStackTrace();}getAvg();}public static void getAvg() throws Exception{try {Scanner input = new Scanner(System.in);//输入总分System.out.println("请输入总分");int sum = input.nextInt();//输入人数System.out.println("请输入人数");int count = input.nextInt();if (count<0){throw new Exception("人数不能是负数:"+count);}//求平均分输出int result = sum/count;System.out.println("result="+result);}catch (ArithmeticException e){e.printStackTrace();}catch (InputMismatchException e){e.printStackTrace();}catch (Exception e){//先处理e.printStackTrace();//再抛出throw e;}finally {System.out.println("11111");}System.out.println("22222222");}
}
运行结果如下: