处理异常方式1 try…catch…
* 语法:
* try{
* 可能发生异常的代码
*
* }catch(Exception e){
* 捕获异常后 的处理
* }
*
java 还是采用 面向对象的方式 来处理异常 ,当java 程序 出现异常 就会产生一个异常对象 这个异常对象中封装了 异常的类型 异常的信息 异常发生的位置 java默认的
异常处理机制 是 把异常信息输出到控制台 并且 终止程序的执行 ,这种机制不能再实际开发中使用 ,实际工作中 我们需要 利用 java 的 异常机制 来处理异常
* try{
* 1. try 后 代码块 没有异常 不执行catch 代码块, 执行 catch后的代码块
* 2. try 后代码块 发生异常 和 catch 后的异常类型匹配 (同种异常 或者 是 子类异常 发生的异常时捕获的异常的子类) 也就是 能catch 到这个异常
* try 的后续代码不执行 ,执行 catch 代码块 ,执行 catch 后的代码
* 3. try 后 发生了异常 但是没有catch try的后续代码不再执行 catch 的后续代码不再执行 程序中断
* 总结:try 后出现异常 java会产生异常对象 寻找能够匹配的catch 块, 找到了 就把异常对象传递给 catch后的异常参数, 出现异常后 try的后续代码不再执行 ,出现异常并被捕获到
* 对应的catch 代码块会被执行 catch 代码块后的也会被执行
*
*
* }
catch(ExceptionType e){
* 捕获异常后的处理方式
* e.printStackTrace(); 打印异常栈信息
* System.err.println("输出错误信息");
* e.getMessage() 异常的提示信息
* e.toString() 异常类信息
*
* throw e; 自己不处理 抛出去 让方法的调用者处理
*
* }
当前的问题: try 后 出现多重异常 怎么处理
生活案例: 正在上班 突然家里有事 需要回家 就不能继续上班 但是回家之前 需要先请假 请假这个操作 就是 发生了异常 也要执行的操作 那这部分代码 需要放在 finally 代码块中
*
* try{
* 可能发生异常的代码
* }catch(ExceptionType e){
* 捕获到异常后 的 处理
* }finally{
* 无论是否有异常 都会执行的代码
* }
*
补充:当 finally代码块 和 return语句同时出现 finally 是在 return 之前执行的
但是 在 finally 中 是没有办法改变 return 的 返回值的
一般情况 finally 代码块 都会被执行 除了系统强制退出 System.exit(0); 0 表示正常退出
异常处理级别:
/**
* Object
* |--Throwable
* |--Error 错误 程序员无法阻止的 控制不了的问题
* |--Exception 异常 程序员可以解决的问题
* |-- RuntimeException 运行时异常 能编译过去 运行的时候可能出现
* |--NullPointException
* |--InputMismatchException
* |-- ......
* |-- Checked Exception 检查时异常 如果不处理的话 编译都过不去
* |--ClassNotFoundException
* |--FileNotFoundException
* |-- ......
*
异常处理的两种方式:
1. 捕获异常 try catch finally
2. throws 异常声明 在 方法声明的小括号后面 使用 这个关键字 对外声明 我这个方法 可能会出现
哪些异常,其后可以跟多个异常 之间用逗号隔开。 谁调用这个方法 谁需要处理这些异常。
throws : 异常声明
throw :异常抛出 相当于 抓住了异常 又把异常释放了 会影响后续程序的执行
区别:
1. 位置
throws 在方法声明处
throw 在方法内部 手动抛出异常 其后跟的是异常对象 如果异常对象是 检查时异常 需要处理 一般是 声明出去 让方法的调用者 来处理
2.后跟内容不同
throws 可以跟多个异常类型 逗号隔开
throw 后 只能跟一个异常对象
3.作用不同
throw 排除异常 相当于 不做处理
throws 声明异常 方法的调用者需要处理
当时在讲接口时 提到了 接口中的方法 对外声明异常 实现类重写的方法 不能抛出比 接口中的方法的异常更大 更多
1万+

被折叠的 条评论
为什么被折叠?



