异常

Posted on 2019-06-04 22:12  喝茶旅程  阅读(68)  评论(0编辑  收藏  举报

Java异常是Java提供的一种识别及响应错误的一致性机制。
  Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出。

Java异常机制用到的几个关键字:try、catch、finally、throw、throws。

一般结构如下: 
try{ 
程序代码 
}catch(异常类型1 异常的变量名1){ 
程序代码 
}catch(异常类型2 异常的变量名2){ 
程序代码 
}finally{ 
程序代码 
} 

• try        -- 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
• catch   -- 用于捕获异常。catch用来捕获try语句块中发生的异常。
• finally  -- finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
• throw   -- 用于抛出异常。
• throws -- 用在方法签名中,用于声明该方法可能抛出的异常。

throw是语句抛出一个异常

语法:throw(异常对象);

throw e

throws


throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)


语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{......}


如: public void function() throws Exception{......}

 

Java中的异常类:

是存在继承关系的

catch块中异常的类型:多个
多重catch块:程序中异常的类型多种多样,仅仅只凭一个catch块不能满足我们的需求

约束条件: 越具体的子异常类卸载catch首位,越抽象的父异常类越往后写
try块中的代码一旦出现异常,程序的执行逻辑就会向catch块转移(在try块中异常引发的代码后的其他内容都不执行)根据catch块中捕获的异常类型,选择要执行的catch块 finally{}块可以和try-catch联合使用:一定会被执行,不管是否引发异常,都将执行finally

try-catch-finally:首先执行的是try,如果引发异常,执行catch块,不管是否引发异常,都将执行finally

System.exit(1):参数类型为int 如果为1 退出Java虚拟机
try-catch--->try-finally 不能省略try块,且不能单独存在
throws:声明异常,通知调用方。方法内部可能会存在异常。请调用方处理 方法名末尾(在该方法中根本没有对该类异常的捕获)
throw:抛出的是具体的某个异常对象