#异常 就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序 当Java程序出现异常时,就会在所处的方法中产生一个异常对象;这个异常对象包括异常的类型,异常出现时程序的运行状态以及对该异常的详细描述 ##异常处理 Java的异常处理是通过5个关键字来实现的:try、catch、finally、throw、throws try-catch 情况1:try块中代码没有出现异常 不执行catch块代码,执行catch块后边的代码 情况2:try块中代码出现异常,catch中异常类型匹配(相同或者父类) 执行catch块代码,执行catch块后边的代码 情况3:try块中代码出现异常,catch中异常类型不匹配 不执行catch块代码,不执行catch块后边的代码,程序会中断运行 注意 出现异常后,Java会生成相应的异常对象,Java系统,寻找匹配的catch块,找到后将异常对象赋给catch块异常参数 出现异常后,try块中尚未执行的语句不会执行 出现异常后并处理后,catch块后面的语句还会执行 try-catch-finally 在try-catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行 通常在finally中关闭程序块已打开的资源,比如:文件流、释放数据库连接等。 finally块中语句不执行的唯一情况:异常处理代码中执行System.exit()退出Java虚拟机 Finally块的具体执行过程 执行try或catch中代码,遇到return/throw,先执行finally中语句块,执行return/throw
##异常分类 一、Error Error类层次描述了Java运行时系统内部错误和资源耗尽错误,一般指与JVM或动态加载等相关的问题,如虚拟机错误,动态链接失败,系统崩溃等。这类错误是我们无法控制的,同时也是非常罕见的错误。所以在编程中,不去处理这类错误
二、Exception 所有异常类的父类,其子类对应了各种各样可能出现的异常事件。 ###Exception分类 1.运行RuntimeException(uncheckedException) 可不必对其处理,系统自动检测 2.检查异常CheckedException 必须捕获进行处理,否则会出现编译错误 注意:只有Java提供了Checked异常,体现Java的严谨性,提高了Java的健壮性 声明异常throws 当CheckedException产生时,不一定立刻处理它,可以再把异常Throws出去 如果一个方法抛出多个已检查异常,就必须在方法的首部列出所有的异常,之间以逗号隔开 子类声明的异常范围不能超过父类声明范围 父类没有声明异常,子类也不能 不可抛出原有方法抛出异常类的父类或上层类
##手动抛出异常throw Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要手工创建并抛出 在捕获一个异常前,必须有一段代码先生成异常对象并把它抛出;这个过程我们可以手工做,也可以由JRE来实现,但是他们调用的都是throw子句
##自定义异常 在程序中,可能会遇到任何标准异常类都没有充分的描述清楚的问题,这种情况下可以创建自己的异常类 从Exception类或者它的子类派生一个子类即可;习惯上,定义的类应该包含2个构造器:一个是默认构造器,另一个是带有详细信息的构造器
|